使用Mockito进行Java单元测试.函数内的函数调用



假设我有以下类:

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);

相关内容

  • 没有找到相关文章

最新更新