我面临的问题是我需要跟踪某些方法的调用,但只能使用指定的参数参数。请参阅下面的问题
@Test
public void simpleTest() {
ArgumentCaptor<Pear> captor = ArgumentCaptor.forClass(Pear.class);
Action action = mock(Action.class);
action.perform(new Pear());
action.perform(new Apple());
verify(action, times(1)).perform(captor.capture());
}
static class Action {
public void perform(IFruit fruit) {}
}
static class Pear implements IFruit {}
static class Apple implements IFruit {}
interface IFruit {}
Run Code Online (Sandbox Code Playgroud)
但是得到:
org.mockito.exceptions.verification.TooManyActualInvocations:
action.perform(<Capturing argument>);
Wanted 1 time:
But was 2 times. Undesired invocation:
..
Run Code Online (Sandbox Code Playgroud)
我做错了什么?Mockito v 1.10
老实说,这只是举例,我的代码更复杂,我不知道,Apple.class 会调用多少次执行。对我来说没关系。我只需要验证 perform(Pear.class) 的调用
UPD: 我需要验证 Pear.class 的方法是否被调用过一次。让我们想象一下,Action 是 Transaction,而 perform 是 save(DomainObject)。所以我需要确保 save(MyDomainObject) 被调用一次,但不管之前保存了多少个对象。此操作对于测试来说是原子的,我无法在这些操作之间重置模拟
要验证带有实例参数的调用次数Pear,您可以使用:
verify(action, times(1)).perform(isA(Pear.class));
Run Code Online (Sandbox Code Playgroud)
请注意,从 Mockito 2.1 开始,以下内容也可以工作:
verify(action, times(1)).perform(any(Pear.class));
Run Code Online (Sandbox Code Playgroud)
参见 公共静态T任何(类类型)
...这是一个别名:isA(Class)...
...自mockito 2.1.0 起,any() 和anyObject() 不再是此方法的别名。
| 归档时间: |
|
| 查看次数: |
2170 次 |
| 最近记录: |