使用mock参数模拟方法

时间:2016-07-22 15:49:38

标签: 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.

2 个答案:

答案 0 :(得分:3)

  

with w_data as ( select 1 event_id, 1.01 event_rank, 12345 c_procedure, 'AA' modifier from dual union all select 1 event_id, 1.02 event_rank, 12345 c_procedure, 'AB' modifier from dual union all select 1 event_id, 1.03 event_rank, 67890 c_procedure, 'ZZ' modifier from dual union all select 2 event_id, 2.01 event_rank, 12345 c_procedure, 'AA' modifier from dual union all select 2 event_id, 2.02 event_rank, 67890 c_procedure, 'ZZ' modifier from dual ) Select event_id, event_rank, c_procedure, modifier from ( select event_id, event_rank, c_procedure, modifier, count(*) over (partition by event_id, c_procedure) dup_chk from w_data ) where dup_chk > 1 / EVENT_ID EVENT_RANK C_PROCEDURE MO ---------- ---------- ----------- -- 1 1.01 12345 AA 1 1.02 12345 AB 2 rows selected.

Mockito将尝试使用签名when(sender.send(Matchers.any(A.class))).thenReturn(value1);来模拟方法,而不是send(A param)

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

send(Object param)

答案 1 :(得分:0)

几个选项:

  1. 请勿使用any。使用您在测试中使用的AB的实例。

  2. 使用Answer对象,可以指定要返回的内容。