【问题标题】:How do I mock call method from testable class?如何模拟可测试类的调用方法?
【发布时间】:2017-03-18 11:55:13
【问题描述】:

想问你一个问题。

我应该如何从可测试类调用的方法中正确返回一些数据?

例如我有下一个结构:

Class SomeClass {
    public void method1(){
    //some logic here
    List<Object> howToReturnHereValues = gatData();
    //some logic here
    }
    public List<Object> getData(){

       return List<Object>;

    }
}

现在我想测试method1(),但我不知道如何模拟调用getData(),它返回List&lt;Object&gt;

有什么建议吗?

【问题讨论】:

  • 看看来自 Mockito 的 Spy。这允许您模拟“真实”对象的一些方法

标签: java unit-testing mocking mockito


【解决方案1】:

您可以使用间谍来执行此操作,如下所述:https://static.javadoc.io/org.mockito/mockito-core/2.7.17/org/mockito/Mockito.html#13

例子:

@Test
public void testMethod1() throws Exception {
    SomeClass someClass = new SomeClass();
    SomeClass spy = Mockito.spy(someClass);
    Mockito.when(spy.getData()).thenReturn(Arrays.asList("blaat", "blabla"));
    spy.method1();
}

这将返回一个“blaat”和“blabla”列表,您的方法1 中的逻辑可以使用它们。

【讨论】:

  • 感谢您的示例回答
【解决方案2】:

现在我想测试method1(),但我不知道如何模拟调用 getData() 返回列表。

模拟一个正在测试的类的公共方法是个坏主意。

单元测试应该测试行为和模拟依赖项。在这里,您在模拟被测类的行为时,只对部分行为进行单元测试。

如果课程是我们的,你可以:

  • 在不模拟 getData() 称为公共方法的情况下测试此方法。
  • 或者如果您不想在每个调用它的测试方法中重复测试getData() 方法,则将getData() 公共方法移到另一个类中,然后模拟这个新依赖项。

如果类是不可修改的,并且确实需要被模拟调用,您可以在被测对象上使用 Mockito 框架的spy() 方法来模拟特定方法的模拟行为。

【讨论】:

  • 感谢您的建议
猜你喜欢
  • 2013-12-26
  • 2020-02-17
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多