我想测试一下这个方法:
li
工厂走这条路
public void some_method(SomeFactory someFactory) {
A a = someFactory.populateWithParameter(parameter1, parameter2, parameter3, parameter4);
a.method_call();
....
}
并且测试是
public class SomeFactory(){
// some constructor
public A populateWithParameter(SomeClass1 someClass1, SomeClass2 someClass2, String string, int parameter){
return new A(someClass1, someClass2, string, parameter)
}
}
我收到此消息
public void testSomeMethod() throws Exception {
SomeFactory someFactory = mock(SomeFactory.class);
when(someFactory.populateWithParameter(
any(SomeClass1.class), any(SomeClass2.class),
anyString(), anyInt())).thenReturn(notNull());
mainActivity.some_method(someFactory);
...
}
答案 0 :(得分:0)
您不能使用notNull()
作为返回值。 Mockito匹配器仅代表调用when
和verify
的参数,并且不能作为返回值。特别是,notNull()
实际上会返回null 并将“not null”匹配标记为隐藏堆栈的副作用,它会在下一次与模拟交互之前保持不变(当你实际上是调用some_method
)。
虽然您没有列出InvalidUseOfMatchersException
的堆栈跟踪,但我敢打赌,当您通过populateWithParameter
调用 some_method
时,实际上会发生错误,而不是你的存根populateWithParameter
。 “1记录”匹配器是notNull()
,其中“4匹配器预期”是指方法调用中的参数数量。错误消息实际上适用于您忘记使用匹配器进行某些参数的情况,例如populateWithParameter(any(), any(), anyString(), 42)
,这是一个非常常见的错误。
虽然我在评论中看到“它不起作用!”当您尝试返回实例时,我可以保证返回notNull()
绝对会导致问题,而返回实例可能只会显示不同的问题。在切换到返回实例后,您可能希望使用完整堆栈跟踪更新问题,或者询问新问题。
有关幕后Mockito匹配器的更多信息,请参阅my question/answer here。