我正在为我的应用程序编写单元测试,我想知道Mockito框架是否有可能影响传递给返回模拟类的void的方法的对象.例如,调用一个模拟的验证类,该类包含一个返回void但通过作为参数传入的对象跟踪各种更改和元数据的方法. .
public GetCartItemsOutput getCartItems(GetCartItemsInput getCartItemsInput) {
CartItemsFilter cartItemsFilter = new CartItemsFilter();
validator.validateCartItemsInput(getCartItemsInput, cartItemsFilter); ...
我为我的其他测试模拟了验证器类,但对于这个我需要模拟对cartItemsFilter对象的更改,我不知道该怎么做.
解决方法:
答案是肯定的,你可以,基于你的测试需要,基本上有两个级别.
如果您只想测试与模拟对象的交互,则可以使用verify()
方法来验证是否调用了void方法.
如果您的测试确实需要模拟对象来修改传递给它的参数,则需要实现Answer
:
编辑以显示正确使用无效方法的答案
doAnswer(new Answer() {
@Override
Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
((MyClass)args[0]).myClassSetMyField(NEW_VALUE);
return null; // void method, so return null
}
}).when(mock).someMethod();
在Java 8中,上面简化了lambda:
doAnswer(invocation-> {
Object[] args = invocation.getArguments();
((MyClass)args[0]).myClassSetMyField(NEW_VALUE);
return null;
}).when(mock).someMethod();