假设我有以下类:
public class Math {
public int mult(int a, int b) {
return 4;
}
public int mul (int a, int b) {
return mult(a,b);
}
}
和以下测试类:
public class TestMockito {
Math testMath;
@Before
public void create () {
testMath = *mock*(Math.class);
when(testMath.mult(1,2).thenReturn(2);
}
@Test
public void test() {
System.out.println(testMath.mul(1,2));
}
}
为什么mul(1,2)
调用test()
不使用when(testMath.mult(1,2).thenReturn(2);
?
有没有其他方法可以模拟在另一个正在测试的方法中使用的方法?
干杯
你通常不会模拟被测代码(除非它是一个抽象类)。
你通常会模拟与你的CUT通信的其他类(依赖关系)。
您的测试不起作用的原因是模拟不是真实类的对象(这就是我们模拟它的原因......它是由模拟框架派生的,其行为不像原始代码,而是像是为测试配置的。
如果你真的想在模拟中调用真正的方法(这不是你大多数时候想要的),你需要告诉 mockito,在创建模拟时:
mock(ClassToBeMocked.class,Mockito.CALL_REAL_METHODS);