![](/img/trans.png)
[英]Can we verify a method is called on one of the several objects using 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.