在特定测试中验证模拟通话

时间:2019-05-30 08:37:07

标签: java mockito testng

在我的单元测试之一中,我试图验证是否从未调用过我的模拟方法之一。问题在于,该模拟是许多其他测试中通用的全局@beforeClass模拟。

因此,当我尝试验证是否从未调用过该模拟程序时,它总是会失败,因为其他测试正在调用该模拟程序。有没有一种方法可以使用Mockito来验证仅针对该测试的模拟调用?

我能想到的一种解决方案是将我的普通模拟从@BeforeClass转换为@Before(这样,在每次测试之前,都会重新创建模拟)。但是想检查是否还有其他解决方案,而无需触及常见的BeforeClass模拟。

@BeforeClass
  public void before() {
    someClassMock = mock(someClass.class);
    when(someClassMock.aMethodCall(any()).thenReturn(true);
  }

// Bunch of tests


  @Test
  public void oneOfTheManytest(){
  //some code where someClassMock.aMethodCall is NOT called

    verify(someClassMock, never()).aMethodCall(any());
    // ^^ This always fails, even when I am sure this mock 
    // is not called for this test. 
    // I think this looks if this mock is called or not overall for this test file.

  }

有人可以提供一种解决方案,帮助我验证特定测试的模拟方法调用吗?

1 个答案:

答案 0 :(得分:0)

我可以在这里推断您的测试未遵循AAA。每个测试都应该可以单独运行,并且它的成功不应该取决于其他测试的执行。

最好的选择是将您需要重复的模拟设置提取到一个辅助方法中,并在测试的“安排”部分中调用它。