繁体   English   中英

Mockito,验证几个方法调用之一

[英]Mockito, Verify one of the method call among several

我正在用 mockito 编写一个 Junit 测试,我想验证一个方法调用是否已进行。 问题是使用不同的参数进行了多个方法调用,我只想验证其中一个。

Eg : Below are 3 method calls from my code
Metrics.emit(PhoneFailCount,0);
Metrics.emit(PaymentFailCount,1);
Metrics.emit(AddresseFailCount,1);

我该如何验证

Metrics.emit(PaymentFailCount,1)至少被调用一次。

如果我直接执行verify(Metrics).emit(PaymentFailCount, 1)它会抛出错误,说 Argument(s) 不同! 因为它试图与 Metrics.emit(PhoneFailCount,0) 匹配

我尝试使用 ArgumentCaptor,但无法同时捕获两个参数

谢谢

您可以为此使用ArgumentCaptor。 在下面选择此代码。 这应该工作

ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class);

ArgumentCaptor<Integer> captor2 = ArgumentCaptor.forClass(Integer.class);

verify(Metrics, times(3)).emit(captor1.capture(), captor2.capture);

List<Integer> values = captor2.getAllValues;
//assertIf values have values 0,1 and 1

使用如下代码:

Metrics metrics = mock(Metrics.class);

// run code that uses metrics

verify(metrics, times(3)).emit(any(), anyInt());
verify(metrics).emit(PaymentFailCount, 1);

所有静态导入都来自org.mockito.Mockito.*

注意:这种方式不会保留调用顺序,这意味着,如果您对emit调用进行重新排序,则测试仍将通过。

除了参数捕获器Mockito.verify() ,还可以在Mockito.verify()使用hamcrest匹配器,但是在验证时必须设置要匹配的规则:

verify(Metrics, times(1)).emit(eq(PaymentFailCount),eq(1));

这是一个旧线程,但仅用于记录:使用当前的 mockito 版本,您可以这样写:

verify(Metrics, atLeastOnce()).emit(PaymentFailCount, 1);

暂无
暂无

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

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