Mockito验证没有更多的交互,但省略了getter

时间:2010-05-27 11:11:28

标签: unit-testing mocking mockito

Mockito api提供方法:

Mockito.verifyNoMoreInteractions(someMock);

但Mockito是否有可能声明我不希望与给定模拟器进行更多交互,除了与其getter方法的交互之外?

简单的场景是我测试SUT只更改给定模拟的某些属性并使其他属性未被打开的情况。

在示例中,我想测试UserActivationService在类User的实例上更改属性Active但不对Role,Password,AccountBalance等属性执行任何操作。

1 个答案:

答案 0 :(得分:14)

目前没有此功能在Mockito中。如果你经常需要它,你可以使用反射wizzard自己创建它,虽然这会有点痛苦。

我的建议是使用VerificationMode来验证您不希望经常调用的方法的交互次数:

@Test
public void worldLeaderShouldNotDestroyWorldWhenMakingThreats() {
  new WorldLeader(nuke).makeThreats();

  //prevent leaving nuke in armed state
  verify(nuke, times(2)).flipArmSwitch();
  assertThat(nuke.isDisarmed(), is(true));
  //prevent total annihilation
  verify(nuke, never()).destroyWorld();
}

当然,WorldLeader API设计的敏感性可能存在争议,但作为一个例子,它应该做。