Mockito:如何验证模拟是最后调用的模拟?

时间:2014-03-19 13:24:57

标签: java unit-testing junit mockito

我知道Mockito.InOrder(http://mockito.googlecode.com/svn/branches/1.6/javadoc/org/mockito/InOrder.html

尽管我已经很好地测试了在方法中的任何其他模拟之前调用了mock,但是我找不到使用它的方法来检查特定模拟是否是最后一次调用。

就我而言,我正在测试一个调用多个接口的中介。在finally语句中,锁被解锁。

我希望我的单元测试能够专门测试是否存在异常,无论发生什么,锁定都会被释放,当然在任何其他操作之后,无论执行了多少次。

我有所涉及的模拟列表,但我无法弄清楚如何告诉Mockito:

  • 嘿! InOrder.verify(aMockWhichIsNotTheLast,atLast(0))。anyMethod()

  • 然后是InOrder.verify(wantedMock).unlock(),所以我知道我的模拟是我所有模拟中调用的最后一个模拟。

感谢您的时间

1 个答案:

答案 0 :(得分:0)

您可以创建一个包装类,例如

public final class Mocks
{
    private final List<Object> mocks = new ArrayList<>();

    public <T> T register(final T mock)
    {
        mocks.add(Objects.requireNonNull(mock));
        return mock;
    }

    public InOrder inOrder()
    {
        return Mockito.inOrder(mocks.toArray());
    }

    public void verifyNoMoreInteractions()
    {
        Mockito.verifyNoMoreInteractions(mocks.toArray());
    }
}

然后您可以使用您的课程:

final Mocks mocks = new Mocks();

final Whatever mock1 = mocks.register(mock(Whatever.class));
final Whatever2 mock2 = mocks.register(mock(Whatever2.class));

final InOrder inOrder = mocks.inOrder();

// verify, verify, verify

mocks.verifyNoMoreInteractions();