我正在尝试验证在我嘲笑的对象上调用了一个方法:
public class MyClass{
public String someMethod(int arg){
otherMethod();
return "";
}
public void otherMethod(){ }
}
public void testSomething(){
MyClass myClass = Mockito.mock(MyClass.class);
Mockito.when(myClass.someMethod(0)).thenReturn("test");
assertEquals("test", myClass.someMethod(0));
Mockito.verify(myClass).otherMethod(); // This would fail
}
这不是我的确切代码,但它模拟了我想要做的事情。尝试验证otherMethod()
被调用时,代码将失败。它是否正确?我对verify
方法的理解是它应该检测在存根方法中调用的任何方法(someMethod
)
我希望我的问题和代码清晰
答案 0 :(得分:4)
不,Mockito mock只会在所有调用中返回null,除非你用eg重写。 thenReturn()
等。
您要找的是@Spy
,例如:
MyClass mc = new MyClass();
MyClass mySpy = Mockito.spy( mc );
...
mySpy.someMethod( 0 );
Mockito.verify( mySpy ).otherMethod(); // This should work, unless you .thenReturn() someMethod!
如果您的问题是someMethod()
包含您不想执行的代码,而是模拟,则注入模拟而不是模拟方法调用本身,例如:
OtherClass otherClass; // whose methods all throw exceptions in test environment.
public String someMethod(int arg){
otherClass.methodWeWantMocked();
otherMethod();
return "";
}
从而
MyClass mc = new MyClass();
OtherClass oc = Mockito.mock( OtherClass.class );
mc.setOtherClass( oc );
Mockito.when( oc.methodWeWantMocked() ).thenReturn( "dummy" );
我希望这有意义,并帮助你一点。
干杯,