模拟Junit、Mockito中的局部变量



我正在做一个使用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还是其他东西)。这将提供选项,让你做你想做的:

  1. 扩展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" );
}
}
  1. 提供一个mockHelperService,做同样的事情:
// 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() );
}

相关内容

  • 没有找到相关文章

最新更新