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

标签 java mockito

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

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/

相关文章:

java - {Filter}ing 是否比 Lucene 中的 {Query}ing 更快?

java - 使用 AlertDialog 中的上下文函数从 MainActivity 获取方法时出现问题

javascript - 如何将带有tinestamp等的CSV文件输入到mahout中实现相似度等功能?

java - 如何模拟方法以返回某些内容而不是抛出异常(PowerMock?)

java - 如何使用参数化构造函数模拟类的对象?

java - Mockito 使用 thenThrow 为 KafkaTemplate.send 抛出异常

java - 如何序列化类?

java - 在 Java 中为对象字段赋值?

scala - 使用 Guice 和 MockitoSugar 模拟返回 Cats EitherT 的服务

java - Mockito 验证 spy 对象方法的返回