scala mockito, verify args - 想要但未调用 MockitoSugar


 class MockitoTest extends MockitoSugar {
  val serviceMock = mock[Service]
  @Test
  def test(): Unit = {
    import org.mockito.Matchers.{eq => eqTo, _} 
    val serviceMock = mock[Service]
    when( serviceMock.call("one") ).
              thenReturn("123")
    verify( serviceMock, times(1) ).call( eqTo("one") )
    val result1 = serviceMock.call("one")
    ...

我最终拥有:

想要但未调用:service.call("one"); ->在莫比托。MockitoTest.test(MockitoTest.scala:34) 实际上,与这个模拟的交互为零。

我错过了什么吗?

您的测试应分为三个部分:

  1. 为协作者创建模拟,并使用when来描述他们的预期行为
  2. 调用与这些协作者交互的受测系统
  3. 如有必要,verify发生了一些交互。

在测试中,2 和 3 颠倒了,步骤 2 直接调用该方法,而不是让被测系统调用它。对verify的调用失败,因为对serviceMock.call("one")的调用尚未发生。

取而代之的是:

when( serviceMock.call("one") ).
          thenReturn("123")
verify( serviceMock, times(1) ).call( eqTo("one") )
val result1 = serviceMock.call("one")

你想要这样的东西:

when( serviceMock.call("one") ).
          thenReturn("123")
/** Instead of val result1 = serviceMock.call("one") directly: */
val systemUnderTest = SystemUnderTest(serviceMock)
systemUnderTest.someMethodThatInvokesServiceCall()
verify( serviceMock, times(1) ).call( eqTo("one") )

杰夫对调用的顺序是正确的。只是简化:

基本上"验证"应该是在调用之后:

  @Test
  def test(): Unit = {
    // GIVEN 
    when( serviceMock. call("one") ).
      thenReturn("123")
    // WHEN
    val result = serviceMock.call("one")
    // THEN
    verify( serviceMock, times(1) ).
      call( eqTo("one") )
    assert(result == "123")
  }

相关内容

  • 没有找到相关文章

最新更新