【问题标题】:scala mockito, verify args - Wanted but not invoked MockitoSugarscala mockito,验证 args - 需要但未调用 MockitoSugar
【发布时间】:2016-02-02 00:19:22
【问题描述】:
 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"); -> 在 mockito.MockitoTest.test(MockitoTest.scala:34) 实际上,与这个模拟的交互为零。

我错过了什么吗?

【问题讨论】:

    标签: scala unit-testing mockito


    【解决方案1】:

    你的测试应该分为三个部分:

    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") )
    

    【讨论】:

    • 你是如何导入verify
    • import org.mockito.Mockito.{verify, when, times}
    【解决方案2】:

    Jeff 关于通话顺序的说法是正确的。只是简化:

    基本上“验证”应该在调用之后:

      @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")
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多