检查是否调用了void方法

最后发布: 2014-01-14 10:17:58


问题

我陷入了与Mockito的第一个jUnit测试中。

我必须测试一个方法,该方法将ArrayList作为参数。 在此方法中,将有另一个名为Runtimes执行的类。 因此,我需要使用Runtime执行来模拟该类,因为它们希望在Jenkins上失败(因为Jenkins在Linux上运行)。

首先是两个类:
HandleInformation testClass; 将成为睾丸的班级
XFDHandler test; 与Runtime执行的接口,该类称为XFDHandlerProd

所以首先我模拟了运行时类:

test = Mockito.mock(XFDHandlerProd.class);

这四个方法都是方法,因此,当我正确理解官方文档时,该方法本身不应执行任何操作:

注意,默认情况下,模拟上的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发送一个空列表时,应将其称为Runtime-Class turnOnBlue();的void方法turnOnBlue(); 据我所知,使用verify方法可以检查该方法是否真的被调用。

但是,当我现在运行测试时,会出现以下错误:

想要但不被调用:xFDHandlerProd.turnOnBlue();
->在com.example.example.business.HandleInformationTest.testNullList(HandleInformationTest.java:44)
实际上,与该模拟游戏的互动为零。

第44行是Mockito.verfiy()的行

现在我不知道我在做什么错。


思想
是通信零监守我在使用HandleInformation类我使用的另一个实例XFDHandler ,所以可以的Mockito没有看到任何活动?
如果是这样,如何我能够在测试类的Mockito使用,而不在不断变化的任何方法HandleInformation类?

java junit mockito
回答

似乎您需要将协作者作为参数传递。 这意味着您需要这样的东西:

XFDHandler test = Mockito.mock(XFDHandlerProd.class);
HandleInformation testClass = new HandleInformation(test);

这样您的测试就可以了。

顺便说一句,我将删除Mockito.times(1),因为它是默认行为


回答

您应该使用setter或构造函数将模拟对象注入到被测对象中,或者仅将其作为方法参数传递,以便模拟对象可以理解您正在测试的对象何时调用模拟对象方法