public class MyClass {
public int result(){
int result = calculate(new ValueProvider());
return result;
}
public int calculate(ValueProvider provider){
return provider.getSalary();
}
}
public class ValueProvider {
public int getSalary(){
return 10000000;
}
}
我需要测试方法result()
,但必须模拟第二种方法,该方法应返回默认值。
使用Mockito spy
创建部分模拟。
例如:
public class TestMyClass {
@Test
public void aTest() {
MyClass spy = Mockito.spy(MyClass.class);
// this will cause MyClass.calculate() to return 5 when it
// is invoked with *any* instance of ValueProvider
Mockito.doReturn(5).when(spy).calculate(Mockito.any(ValueProvider.class));
Assert.assertEquals(123, spy.result());
}
}
在此测试案例中,calculate
上的调用是模拟的,但result
上的调用是真实的。从文档中:
您可以创建真实对象的间谍。当您使用间谍时,将调用真实方法(除非方法是固定的)。