繁体   English   中英

使用Mockito通过Object参数模拟方法

[英]Use mockito to mock method with Object parameter

我有一种方法:

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)

您需要基于参数的类返回一个不同的值。 您需要为此使用答案。

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());

几个选项:

  1. 不要使用any 使用您在测试中使用的AB的实例。

  2. 使用Answer对象,这将允许您指定要返回的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM