模拟方法在同一个类中称为内部测试方法

时间:2017-09-27 11:21:56

标签: android mockito junit4

 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(),但必须模拟第二个方法计算应该返回默认值。

1 个答案:

答案 0 :(得分: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

  

您可以创建真实对象的间谍。当你使用spy时,会调用真正的方法(除非方法被存根)。