我面临的问题是我需要跟踪某些方法的调用,但只能使用指定的参数参数。请参阅下面的问题
@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) 被调用一次,但不管之前保存了多少个对象。此操作对于测试来说是原子的,我无法在这些操作之间重置模拟