2017-06-14 132 views
0

假設我有以下類: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

回答

2

你通常不嘲笑被測的代碼(除非它是一個抽象類)。

您通常會嘲笑您的CUT與之通信的其他類(依賴關係)。

爲什麼你的測試不起作用(如你所期望的)是模擬不是真正的類的對象(這就是我們爲什麼嘲笑它的原因....)。它已經由嘲諷框架而不是得到,其行爲與原始代碼相似,但是像它已經配置用於測試。

如果你真的想被稱爲在模擬真實的方法(這是不是你想要的大部分時間),你需要告訴說的Mockito創建模擬時:

mock(ClassToBeMocked.class,Mockito.CALL_REAL_METHODS);