如何从可测试类中模拟调用方法?
想问你一个问题。如何从可测试类中模拟调用方法?
我该如何正确地从可测试类调用的方法中返回一些数据?
比如我有一个结构:
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>
。
有什么建议吗?
为此,您可以使用间谍,喜欢这里解释: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中。
感谢您的示例 – Andrew
现在我想测试method1(),但我不知道如何模拟调用 getData(),它返回List。
嘲笑正在测试的类的公共方法是一个坏主意。
单元测试应测试行为和模拟依赖性。在这里,当你嘲笑被测试类的行为时,你只测试一部分行为。
如果类是我们的你可以:
- 这两项测试中这种方法不嘲讽
getData()
称为公共方法。
- 或将
getData()
公用方法移动到另一个类中,然后模拟这种新的依赖关系,如果您不想在每个调用它的测试方法中重复测试getData()
方法。
如果类是不可修改和嘲笑所谓的真正需要,您可以使用框架的Mockito的spy()
方法的对象接受测试,以模拟嘲笑的行为,具体的方法。
的答案感谢您的建议 – Andrew
看看Mockito的'Spy'。这允许你模拟一个“真实”对象的一些方法 – Rouliboy