2017-03-18 43 views
1

想问你一个问题。如何从可测试类中模拟调用方法?

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

比如我有一个结构:

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<Object>

有什么建议吗?

+0

看看Mockito的'Spy'。这允许你模拟一个“真实”对象的一些方法 – Rouliboy

回答

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”和“布拉布拉”的名单在你的方法1中。

+0

感谢您的示例 – Andrew

2

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

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

单元测试应测试行为和模拟依赖性。在这里,当你嘲笑被测试类的行为时,你只测试一部分行为。

如果类是我们的你可以:

  • 这两项测试中这种方法不嘲讽getData()称为公共方法。
  • 或将getData()公用方法移动到另一个类中,然后模拟这种新的依赖关系,如果您不想在每个调用它的测试方法中重复测试getData()方法。

如果类是不可修改和嘲笑所谓的真正需要,您可以使用框架的Mockito的spy()方法的对象接受测试,以模拟嘲笑的行为,具体的方法。

+0

的答案感谢您的建议 – Andrew

相关问题