Java 检查是否调用了void方法

Java 检查是否调用了void方法,java,junit,mockito,Java,Junit,Mockito,我的第一个jUnit测试被Mockito卡住了 我必须测试一个以ArrayList为参数的方法。在这个方法中,将有另一个名为的类,它运行运行时执行。所以我需要用运行时执行来模拟类,因为它们希望在Jenkins上失败(因为Jenkins在Linux上运行) 前两类: HandleInformation测试类将被测试的类 XFDHandler测试与运行时执行的接口,该类称为XFDHandlerProd 因此,首先我模拟运行时类: test = Mockito.mock(XFDHandlerProd.

我的第一个jUnit测试被Mockito卡住了

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

前两类:
HandleInformation测试类将被测试的类
XFDHandler测试与运行时执行的接口,该类称为XFDHandlerProd

因此,首先我模拟运行时类:

test = Mockito.mock(XFDHandlerProd.class);
这四种方法都是void方法,因此如果我正确理解了以下内容,那么该方法本身不应该做任何事情:

注意,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();
}
@测试
public void testNullList()引发IOException、InterruptedException{
ArrayList nullArray=新的ArrayList();
testClass.handleInformation(nullArray);
Mockito.verify(test,Mockito.times(1)).turnOnBlue();
}
当我向testClass发送一个空列表时,它应该被称为运行时类
turnOnBlue()的void方法。据我所知,使用
verify
方法,我可以检查是否真的调用了该方法

但是当我现在运行测试时,我将得到以下错误:

需要但未调用:xFDHandlerProd.turnOnBlue()
->在com.example.example.business.HandleInformationTest.testNullList(HandleInformationTest.java:44)
实际上,与这个模拟没有任何交互

第44行是带有
Mockito.verfiy()的行

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


思想
通信是否为零,因为我在
HandleInformation
类中使用了
XFDHandler
的另一个实例,所以Mockito看不到任何活动?

如果是这样,我如何能够在测试中使用Mockito类而不更改
HandleInformation
类中的任何方法?

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

XFDHandler test = Mockito.mock(XFDHandlerProd.class);
HandleInformation testClass = new HandleInformation(test);
那你的测试就行了


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

您应该使用setter或constructor将您的模拟对象注入到您的测试对象中,或者只是将其作为方法参数传递,以便mockito能够理解您正在测试的对象何时调用模拟对象方法

您是否在“testClass”中注入/设置“test”实例?您的想法可能是正确的,因为您需要将为XFDHandler创建的mock注入HandleInformation类。你的HandleInformation类是如何实例化的?你能添加代码来说明你是如何设置
testClass
对象的吗?嗯,这不是空数组,这是一个空数组,这是不同的。但这并不是你的问题(至少,我对此表示怀疑)。@发条缪斯:说得好。不管它是空的还是空的,但是名称确实拼错了。谢谢你。谢谢。是的,我刚在文件上看到,我可以把它移除。干杯