Java单元使用Mockito进行测试。在函数内部函数调用

问题描述:

假设我有以下类:Java单元使用Mockito进行测试。在函数内部函数调用

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

为什么叫test()mul(1,2)不使用when(testMath.mult(1,2).thenReturn(2);

是否有任何其他方式来模拟正在测试的另一种方法内使用的方法?

干杯

+2

这里'Math'是被测试的类。你并不想嘲笑正在测试的班级。 – Jobin

+0

@Jobin奇怪。我从以下地址学习:https://www.youtube.com/watch?v = 79eXGJ2rKZs – Anant

你通常不嘲笑被测的代码(除非它是一个抽象类)。

您通常会嘲笑您的CUT与之通信的其他类(依赖关系)。

为什么你的测试不起作用(如你所期望的)是模拟不是真正的类的对象(这就是我们为什么嘲笑它的原因....)。它已经由嘲讽框架而不是得到,其行为与原始代码相似,但是像它已经配置用于测试。

如果你真的想被称为在模拟真实的方法(这是不是你想要的大部分时间),你需要告诉说的Mockito创建模拟时:

mock(ClassToBeMocked.class,Mockito.CALL_REAL_METHODS);