gpt4 book ai didi

java - Mockito 的 verify 方法干扰 doAnswer 的检查

转载 作者:行者123 更新时间:2023-12-02 03:09:18 25 4
gpt4 key购买 nike

当使用模拟进行单元测试时,我经常遇到需要检查模拟的某个方法是否使用正确的参数调用的情况。这意味着我必须以某种方式找到一种方法来查看传递给相关方法的内容。在 Spock 中,可以使用以下方法来完成:

1 * serviceMock.operate(*_) >> { args ->
def argument = args[0]
assert expectedValue = argument.actualValue
}

对于 Mockito(和 JUnit),我认为可以做到这一点的唯一方法是使用 doAnswerverify,例如:

doAnswer(new Answer() {
//check arguments here
}).when(service).operate(any(Data.class));

然后我必须验证该操作是否确实被调用:

verify(service).operate(any(Data.class));

但是,上面的代码会干扰 doAnswer,就好像它是对相关方法的实际调用一样。如何解决这个问题,以便我既可以验证该方法是否被调用,又可以验证它获取的参数是否正确?

最佳答案

Mockito 以自然的 java 风格验证参数值:通过使用 equals() 方法。这也是匹配参数的推荐方式,因为它使测试变得干净和简单。

ArgumentCaptor<Data> argument = ArgumentCaptor.forClass(Data.class);
verify(service).operate(argument.capture());
assertEquals("John", argument.getValue().getDataName());

更多引用here

希望这会有所帮助

关于java - Mockito 的 verify 方法干扰 doAnswer 的检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36690961/

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