gpt4 book ai didi

java - 检查是否调用了 void 方法

转载 作者:行者123 更新时间:2023-12-01 13:37:59 24 4
gpt4 key购买 nike

我在 Mockito 的第一次 jUnit 测试中遇到了困难。

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

首先是两个类:
HandleInformation testClass; 将被测试的类
XFDHandler test;与Runtime执行的接口(interface),该类名为XFDHandlerProd

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

test = Mockito.mock(XFDHandlerProd.class);

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

Beware that void methods on mocks do nothing by default!

那么我将进行第一个测试:

@Test
public void testNullList() throws IOException, InterruptedException {
ArrayList<Info> nullArray = new ArrayList<Info>();

testClass.handleInformation(nullArray);
Mockito.verify(test, Mockito.times(1)).turnOnBlue();
}

当我向 testClass 发送一个空列表时,应该调用运行时类 turnOnBlue(); 的 void 方法。据我所知,使用 verify 方法我可以检查该方法是否真的被调用。

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

Wanted but not invoked: xFDHandlerProd.turnOnBlue();
-> at com.example.example.business.HandleInformationTest.testNullList(HandleInformationTest.java:44)
Actually, there were zero interactions with this mock.

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

的行

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

<小时/>

想法
通信是否为零,因为我在 HandleInformation 类中使用了 XFDHandler 的另一个实例,因此 Mockito 看不到任何 Activity ?
如果是这样,我如何能够在测试中使用 Mockito 类而不更改 HandleInformation 类中的任何方法?

最佳答案

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

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

那么你的测试就会成功。

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

关于java - 检查是否调用了 void 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21110953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com