假设我有一个有两个方法的类,我不关心哪个叫...
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/