我正在做一个使用Mockito的代码测试用例。代码看起来像这样,
public class Example {
@Autowired
private HelperService hs;
public void someMethod() {
List<String> names = new ArrayList<>();
hs.addValues(names);
if(names.size() < 5) {throw new RuntimeException("Invalid names list");}
return;
}
}
public class HelperService {
public void addValues(List<String> names) {
names.add("alex");
names.add("harry");
names.add("james");
names.add("maria");
names.add("bob");
}
}
我知道这是一个人为的例子,但我有一个类似的用例,我不能修改现有的代码。我想对示例进行单元测试使用Junit类,5. 我如何测试names.size()
为<5 .
我将假设您已经有了在测试中设置HelperService
字段的方法(无论是通过使其成为@SpringBootTest
,使用@InjectMocks
还是其他东西)。这将提供选项,让你做你想做的:
- 扩展
HelperService
并注入:
// Inject this into your class under test
private HelperService hs = new LessThan5NameAddingHelperService();
class LessThan5NameAddingHelperService extends HelperService {
@Override
public void addNames( List<String> names ) {
names.add( "Dave" );
}
}
- 提供一个
mock
HelperService
,做同样的事情:
// Inject this into your class under test
private HelperService hs;
@Before
public void setupMockHelperService() {
hs = mock( HelperService.class );
doAnswer( invocation -> {
List<String> names = ( List<String> ) invocation.getArguments()[0];
names.add( "Dave" );
return null;
} ).when( hs ).addNames( any() );
}