java - 使用 mockito 模拟带有 Object 参数的方法

标签 java unit-testing mockito

我有一个方法:

public class Sender{
  public Object send(Object param){
    Object x;
    .....
    return (x);
  }
}

我想使用 Mockito 为该方法编写单元测试,以便返回类型值基于参数的类类型。所以我这样做了:

when(sender.send(Matchers.any(A.class))).thenReturn(value1);
when(sender.send(Matchers.any(B.class))).thenReturn(value2);

但是无论参数类类型如何,返回值始终为值 2。如何让它返回 A 类类型参数的值 1 和 B 类类型参数的值 2。

最佳答案

when(sender.send(Matchers.any(A.class))).thenReturn(value1);

Mockito 将尝试模拟具有签名 send(A param) 的方法,而不是 send(Object param)

您需要的是根据您的参数类返回不同的值。为此,您需要使用 Answers。

Mockito.doAnswer(invocationOnMock -> {
    if(invocationOnMock.getArguments()[0].getClass() instanceof A) {
        return value1;
    }
    if(invocationOnMock.getArguments()[0].getClass() instanceof B) {
        return value2;
    }
    else {
        throw new IllegalArgumentException("unexpected type");
    }
}).when(mock).send(Mockito.anyObject());

关于java - 使用 mockito 模拟带有 Object 参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38530652/

相关文章:

java - 为什么 libGdx Asset 位于 android 子模块中

java - _JAVA_OPTIONS、JAVA_TOOL_OPTIONS 和 JAVA_OPTS 之间的区别

java - 如何在不刷新所有页面的情况下刷新表格内容

c++ - 有什么方法可以在 CppUTest 中模拟全局变量吗?

java - 如何修复此错误 : java. lang.NoSuchMethodError: 'java.lang.AutoCloseable org.mockito.MockitoAnnotations.openMocks(java.lang.Object)'

java - Netty代理示例中ctx.write(Unpooled.EMPTY_BUFFER)的用途是什么

unit-testing - 单元测试组成

.net - 如何对机器特定行为进行单元测试?

java - Mockito - Argument Captor 未捕获且没有交互

java - Mockito 不适用于 RestTemplate