gpt4 book ai didi

java - Mockito:你如何验证某些方法调用组的组顺序?

转载 作者:搜寻专家 更新时间:2023-10-30 21:09:54 25 4
gpt4 key购买 nike

我正在使用 Mockito 通过 InOrder 对象验证方法调用的顺序。但我对调用的总顺序不感兴趣,只对某组方法调用全部发生在调用其他一些方法之前感兴趣。比如像这样

@Test
public void testGroupOrder() {
Foo foo1 = mock(Foo.class);
Foo foo2 = mock(Foo.class);
Bar underTest = new Bar();
underTest.addFoo(foo1);
underTest.addFoo(foo2);

underTest.fire()

InOrder inOrder = inOrder(foo1,foo2);

inorder.verify(foo1).doThisFirst();
inorder.verify(foo2).doThisFirst();

inorder.verify(foo1).beforeDoingThis();
inorder.verify(foo2).beforeDoingThis();
}

但是这个测试确实测试了太多,因为它测试了 Foo 实例的顺序。但我只对不同方法的顺序感兴趣。事实上,我希望 underTest 不区分 Foo 的实例,它们可能有内部顺序,也可能没有,所以调用 foo 的顺序无关紧要.我想将其保留为实现细节。

但重要的是,在对 调用 beforeDoingThis() 之前,对 所有 的 foo 调用了 doThisFirst()任何其他 foo。可以用 Mockito 表达吗?怎么办?

最佳答案

Mockito 验证传递给 inorder 函数的所有模拟的顺序。因此,如果您不想验证 foo 的顺序,则需要创建两个单独的顺序。即

@Test
public void testGroupOrder() {
Foo foo1 = mock(Foo.class);
Foo foo2 = mock(Foo.class);
Bar underTest = new Bar();
underTest.addFoo(foo1);
underTest.addFoo(foo2);

underTest.fire()

InOrder inOrderFoo1 = inOrder(foo1);
inOrderFoo1.verify(foo1).doThisFirst();
inOrderFoo1.verify(foo1).beforeDoingThis();

InOrder inOrderFoo2 = inOrder(foo2);
inOrderFoo2.verify(foo2).doThisFirst();
inOrderFoo2.verify(foo2).beforeDoingThis();
}

关于java - Mockito:你如何验证某些方法调用组的组顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12421014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com