【发布时间】:2014-02-02 08:37:48
【问题描述】:
我在第一次使用 Mockito 的 jUnit 测试中陷入困境。
我必须测试一个以 ArrayList 作为参数的方法。在此方法中,将有另一个名为运行运行时执行的类。所以我需要用运行时执行来模拟这个类,因为他们想在 Jenkins 上失败(因为 Jenkins 在 Linux 上运行)。
首先是两个类:HandleInformation testClass; 将成为 testet 的类XFDHandler test; 运行时执行的接口,该类称为 XFDHandlerProd
首先我模拟运行时类:
test = Mockito.mock(XFDHandlerProd.class);
这四个方法都是void-方法,所以当我正确理解official doc时,方法本身不应该做任何事情:
注意,mock 上的 void 方法默认什么都不做!
那么我会做我的第一个测试:
@Test
public void testNullList() throws IOException, InterruptedException {
ArrayList<Info> nullArray = new ArrayList<Info>();
testClass.handleInformation(nullArray);
Mockito.verify(test, Mockito.times(1)).turnOnBlue();
}
当我向 testClass 发送一个空 List 时,它应该被称为 Runtime-Class turnOnBlue(); 的 void-method。据我所知,使用verify 方法我可以检查该方法是否真的被调用了。
但是当我现在运行测试时,我会得到以下错误:
需要但未调用:xFDHandlerProd.turnOnBlue();
-> 在 com.example.example.business.HandleInformationTest.testNullList(HandleInformationTest.java:44)
实际上,与此模拟的交互为零。
第 44 行是Mockito.verfiy() 的行
现在我不知道自己做错了什么。
思想
通信为零是因为我在 HandleInformation 类中使用了 XFDHandler 的另一个实例,所以 Mockito 看不到任何活动吗?
如果是这样,我如何能够在测试中使用 Mockito 类而不更改 HandleInformation 类中的任何方法?
【问题讨论】:
-
您是否在“testClass”中注入/设置“test”实例?您的想法可能是正确的,因为您需要将创建的 XFDHandler 模拟注入到 HandleInformation 类中。您的 HandleInformation 类是如何实例化的?
-
您能否添加代码来显示您如何设置
testClass对象? -
嗯,那不是空数组,那是空数组,有区别。不过,这并不是你的问题(或者至少,我对此表示怀疑)。
-
@Clockwork-Muse:好点。它是空还是空都没有关系,但名称确实拼写错误。谢谢