0

通常会检查 Specs2 加糖的 Mockito 验证,并在适当的时候通过测试。但是在某些情况下,它们会被忽略。

通常,此测试验证会按预期失败,因为 myApp 至少调用了一次 myService。

import org.specs2.mock.Mockito._

class MySpec extends Specification with Mockito {
  "MyApp" should {
     "blow up" in WithApplication {
         val myService = mock[MyService]
         val myApp = new MyApp(myService)

         myApp.doSomething          

         there was no(myService).doSomethingElse
     }
  }
}

(注意WithApplication是一个玩!框架的东西)

然而,由于我已经将蛋糕模式特征融入到我的组件中,所以我的测试看起来像这样。

class MySpec extends Specification with Mockito {
  "MyApp" should {
     "blow up" in WithApplication with MockRegistry {

         val myApp = new MyApp(myService)

         myApp.doSomething          

         there was no(myService).doSomethingElse
     }
  }
}

MockRegistry 看起来像这样

trait MockRegistry extends Mockito with MyServiceComponent {
  val myService = mock[MyService]
}

我的 Cake 图案测试永远不会失败。我可以将其更改为任何内容,它们都会被忽略。

there was no(myService).doSomethingElse
there was one(myService).doSomethingElse
there was two(myService).doSomethingElse

但是,通过直接调用 java 方法来替换加糖的 mockito 步骤,它在适当的时候确实会失败。

import org.mockito.Mockito._

verify(myService, times(1)).doSomethingElse

因此,似乎涉及测试方法的特征似乎已经正确混淆了 Mockito。

4

2 回答 2

2

那是因为Mockito扩展MockRegistry不知道在失败的情况下需要抛出异常。但是MockitoonSpecification确实是因为混入Specification了特质。ThrownExpectations

因此,您可以从中删除Mockito扩展名MockRegistry或添加ThrownExpectations到其中:

trait MockRegistry extends MyServiceComponent {
  val myService = mock(classOf[MyService])
}

// or
import org.specs2.matcher.ThrownExpectations

trait MockRegistry extends MyServiceComponent with ThrownExpectations {
  val myService = mock(classOf[MyService])  
}  
于 2014-02-26T04:34:10.077 回答
0

正如预期的那样,这是由于特征。由于有太多的 Mockito 特征,它正面临着......

我的规格有一个模仿特征。我的蛋糕模式模拟组件注册表也有一个 mockito 特征。在测试方法上,它们都是对象的一部分,这似乎使 Specs2/Mockito 感到困惑。

因此,通过从我的模拟组件注册表中删除 Mockito 糖:

//import org.specs2.mock.Mockito._
import org.mockito.Mockito._

trait MockRegistry extends MyServiceComponent {
  val myService = mock(classOf[MyService])
}

并且只有规范中的 Mockito 糖,然后我的糖化验证再次开始按预期工作。

于 2014-02-25T12:02:55.673 回答