小编Bog*_*ros的帖子

Mockito 的 Argument Captor 行为

我面临的问题是我需要跟踪某些方法的调用,但只能使用指定的参数参数。请参阅下面的问题

@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) 被调用一次,但不管之前保存了多少个对象。此操作对于测试来说是原子的,我无法在这些操作之间重置模拟

java mockito

5
推荐指数
1
解决办法
2170
查看次数

标签 统计

java ×1

mockito ×1