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()
,但必须模拟第二个方法计算应该返回默认值。
答案 0 :(得分:0)
使用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
上的调用是真实的。来自the docs:
您可以创建真实对象的间谍。当你使用spy时,会调用真正的方法(除非方法被存根)。