2017-09-27 114 views
0
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

使用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

您可以創建真實對象的間諜。當你使用間諜,那麼真正的方法被調用(除非方法被扼殺)。

+0

並非如預期的那樣,它返回的計算值不是5 –

+0

這表明它不能匹配'new ValueProvider()',我不知道ValueProvider的equals方法是如何實現的。你會知道這一點,因爲它是你的類,所以在設置'caluclate()'的期望時可能使用不同的匹配器。 – glytching

+0

我在問題中增加了valueProvider代碼,現在你可以理解了。 –