gpt4 book ai didi

java - 如何验证是否使用 Mockito 调用了两种方法中的一种?

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:01 26 4
gpt4 key购买 nike

假设我有一个有两个方法的类,我不关心哪个叫...

public class Foo {
public String getProperty(String key) {
return getProperty(key, null);
}
public String getProperty(String key, String defaultValue) {
//...
}
}

以下两个(来自另一个类,仍在我的申请中)应该通过我的测试:

public void thisShouldPass(String key) {
// ...
String theValue = foo.getProperty(key, "blah");
// ...
}

public void thisShouldAlsoPass(String key) {
// ...
String theValue = foo.getProperty(key);
if (theValue == null) {
theValue = "blah";
}
// ...
}

我不关心调用了哪个,我只想调用两个变体之一。

在 Mockito 中,我通常可以做这样的事情:

Mockito.verify(foo, atLeastOnce()).getProperty(anyString());

或者:

Mockito.verify(foo, atLeastOnce()).getProperty(anyString(), anyString());

是否有一种本地方式来表示“验证其中之一至少发生一次”?

或者我必须做一些像这样粗鲁的事情:

try {
Mockito.verify(foo, atLeastOnce()).getProperty(anyString());
} catch (AssertionError e) {
Mockito.verify(foo, atLeastOnce()).getProperty(anyString(), anyString());
}

最佳答案

您可以将 atLeast(0)ArgumentCaptor 结合使用:

ArgumentCaptor<String> propertyKeyCaptor = ArgumentCaptor.forClass(String.class);
Mockito.verify(foo, atLeast(0)).getProperty(propertyKeyCaptor.capture(), anyString());

ArgumentCaptor<String> propertyKeyCaptor2 = ArgumentCaptor.forClass(String.class);
Mockito.verify(foo, atLeast(0)).getProperty(propertyKeyCaptor2.capture());

List<String> propertyKeyValues = propertyKeyCaptor.getAllValues();
List<String> propertyKeyValues2 = propertyKeyCaptor2.getAllValues();

assertTrue(!propertyKeyValues.isEmpty() || !propertyKeyValues2.isEmpty()); //JUnit assert -- modify for whatever testing framework you're using

关于java - 如何验证是否使用 Mockito 调用了两种方法中的一种?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32828486/

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