Mockito,模拟类和实际调用无效方法

时间:2018-11-09 14:26:47

标签: java mockito

顾名思义,问题是这样的:我有AdesioneMerger的模拟,我必须调用真正的merge方法。 merge是无效方法。

这是错误的:

adesioneMerger = Mockito.spy(AdesioneMerger.class);

Mockito.when(adesioneMerger.merge(
    Matchers.any(AdesioneBean.class),
    Matchers.any(Adesione.class), 
    Matchers.any(ServiceResultBean.class))
).ThenCallRealMethod();

怎么了?

2 个答案:

答案 0 :(得分:0)

对于void方法,请使用备用API:

Mockito.doCallRealMethod()
  .when(adesioneMerger).merge(
     Matchers.any(AdesioneBean.class),
     Matchers.any(Adesione.class), 
     Matchers.any(ServiceResultBean.class));

问题在于Mockito.when()需要一个参数(Java中没有空类型的参数)。替代的API通过在模拟类型上调用when()来解决此问题,并在when(...)的返回值上调用模拟的实际方法。

另请参阅以下答案:How to make mock to void methods with mockito

答案 1 :(得分:0)

尝试这种方式:

doCallRealMethod().when(adesioneMerger).merge(
    Matchers.any(AdesioneBean.class),
    Matchers.any(Adesione.class), 
    Matchers.any(ServiceResultBean.class);