2017-09-27 223 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代码,现在你可以理解了。 –