scala mockito,验证args - 通缉但未引用MockitoSugar

时间:2016-02-02 00:19:23

标签: scala unit-testing mockito

 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)实际上,这个模拟没有互动。

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

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

  1. 为协作者创建模拟,并使用when来描述其预期行为
  2. 调用与这些协作者交互的受测试系统
  3. 如有必要,verify发生了一些互动。
  4. 在您的测试中,您有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") )
    

答案 1 :(得分:0)

杰夫对于电话的顺序是正确的。简化:

基本上"验证"应该是电话后:

id