【问题标题】:How do I verify that, from a certain point on, there are no more interactions with a mock?我如何验证从某个时刻起,不再与模拟进行交互?
【发布时间】:2014-10-03 14:29:33
【问题描述】:

我正在尝试验证对函数的调用不会导致与模拟的任何交互。但是,该模拟 在调用函数之前在类的构造函数中使用。

这不起作用,因为有 与模拟交互:

SomeMock someMock = mock(SomeMock.class);
Subject subject = new Subject(someMock); // interactions with someMock happen here

subject.doNothingWithMock();

verifyNoMoreInteractions(someMock);

这是一个脆弱的解决方案:

SomeMock someMock = mock(SomeMock.class);
Subject subject = new Subject(someMock); // interactions with someMock happen here

verify(someMock).anInteraction();
verify(someMock).anotherInteraction();

subject.doNothingWithMock();

verifyNoMoreInteractions(someMock);

它很脆弱,因为如果构造函数更改为与 mock 进行其他交互,则需要更改测试,即使测试不测试构造函数。

还有其他选择吗?

【问题讨论】:

    标签: java unit-testing testing mocking mockito


    【解决方案1】:

    当 Mockito 被静态导入时,您可以重置 mock:Mockito.reset(someMock); 或只是 reset(someMock);。

    这个方法接受可变数量的参数,所以你甚至可以做reset(someMock1, someMock2, ...);

    【讨论】:

      猜你喜欢
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      相关资源
      最近更新 更多