java - 是否可以将 Mockito mock 配置为在一次调用中调用多个答案?

标签 java junit mockito

我有一个测试一堆类的测试,我必须 stub 一个 void 方法。 stub 行为应始终调用一个回调,在某些情况下还应调用第二个回调,具体取决于调用参数。 这是我的测试代码,方法名称代表我想要完成的。

doAnswer(new Answer<Void>()
{
    @Override
    public Void answer(InvocationOnMock invocation) throws Throwable
    {
        callback.thisShouldBeAlwaysCalled();
        return null;
    }
}).when(service).foo(any(Bar.class));

doAnswer(new Answer<Void>()
{
    @Override
    public Void answer(InvocationOnMock invocation) throws Throwable
    {
        callback.thisShouldBeCalledInAdditionInSomeCases();
        return null;
    }
}).when(service).foo(argThat(new CustomBarMatcher(42)));

目前,我必须在 answer() 主体中使用 if 语句来涵盖这些与 any(Bar.class) 匹配器相结合的用例,但使用自定义匹配器会更容易、更清晰。 是否可以将 Mockito 模拟配置为在一次调用中调用多个答案?

最佳答案

一个简单的方法是创建一个复合答案:

final Answer answer1 = ...;
final Answer answer2 = ...;
Answer compositeAnswer = new Answer() {
  public Void answer(InvocationOnMock invocation) throws Throwable {
    answer1.answer(invocation);
    answer2.answer(invocation);
    return null;
  }
};

可能存在为您构建此组合的实用方法。

所以要完成,使用:

doAnswer(compositeAnswer ).when(service).foo(any(Bar.class));

关于java - 是否可以将 Mockito mock 配置为在一次调用中调用多个答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28625062/

相关文章:

java - 可以使用 Mockito 来模拟 org.jibx.runtime.BindingDirectory 吗?

java - 使用 Mockito 在 Spring 进行单元测试

java - 如何访问警报对话框的 onclick 监听器中的非最终变量而不使其成为最终变量

java - 可以使用 xml 属性 onClick ="click"更改按钮文本,而无需创建按钮对象

java - 通过父类(super class)返回与类名相同的数据类型?

android - 如何使用 Koin 在仪器测试中注入(inject)使用 androidContext 的类?

java - Maven 没有看到 Mockito 测试?

java - 如何在 Flux 上同时调用 subscribe 和 blockLast ?

java - 知道如何为下面的代码编写 UT 吗?

java - 在 eclipse 中运行 nutch 单元测试的配置