检查是否调用了void方法

时间:2014-01-14 10:17:58

标签: java junit mockito

我和Mockito一起参加了我的第一次jUnit测试。

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

首先是两个班级:
HandleInformation testClass;将要测试的课程 XFDHandler test;与Runtime执行的接口,该类名为XFDHandlerProd

首先我嘲笑Runtime-Class:

test = Mockito.mock(XFDHandlerProd.class);

这四种方法都是 void -methods,所以当我正确理解official doc时,方法本身不应该做任何事情:

  

请注意默认情况下模拟上的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();
   - &GT;在com.example.example.business.HandleInformationTest.testNullList(HandleInformationTest.java:44)
  实际上,这个模拟没有互动。

第44行是Mockito.verfiy()

的行

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


思想
由于我在HandleInformation课程中使用XFDHandler的另一个实例,因此通信为零,因此Mockito看不到任何活动?
如果是这样,我怎样才能在测试中使用Mockito类而不改变HandleInformation类中的任何方法?

2 个答案:

答案 0 :(得分:1)

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

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

然后你的测试就可以了。

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

答案 1 :(得分:0)

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