gpt4 book ai didi

java - 使用 ArgumentCaptor 验证模拟服务调用失败

转载 作者:行者123 更新时间:2023-11-29 07:32:22 25 4
gpt4 key购买 nike

在测试中,我使用了模拟服务。我想检查是否使用其中一个参数的特定属性调用了一次服务。然而,该方法也被其他参数多次调用,但我只对上面的一次调用感兴趣。

我的目的是使用参数捕获器验证调用,以检查感兴趣的调用是否仅被调用一次。然而,这失败了,因为该方法被多次调用,之后会检查参数捕获器。

请看下面的例子:

// service method
void serviceMethod(String someString, MyType myType);

// parameter type
class MyType {
private String id;
...
String getID() {
return id;
}
}

// test verification
ArgumentCaptor<MyType> paramCaptor = ArgumentCaptor.forClass(MyType.class);
// fail in verify
Mockito.verify(serviceMock, times(1)).serviceMethod(eq("someConstantValue"), paramCaptor);
assertEquals("123", paramCaptor.getValue().getID());

最佳答案

我用 hamcrest Matcher 解决了这个问题。匹配器在验证方法调用时检查参数值,而参数捕获器仅读取参数以供以后评估。在这种情况下,所有其他具有未指定值的调用都被过滤掉。

static Matcher<MyType> typeIdIs(final String id) {
return new ArgumentMatcher<MyType>() {
@Override
public boolean matches(Object argument) {
return id.equals(((MyType)argument).getID());
}
};
}

Mockito.verify(serviceMock, times(1)).serviceMethod(eq("someConstantValue"), argThat(typeIdIs("123")));

关于java - 使用 ArgumentCaptor 验证模拟服务调用失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40263553/

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