Specs2 运行 测试之外的匹配器 class 在匿名内部 class

Specs2 running a matcher outside of the test class in an anonymous inner class

我正在运行进行以下测试:

class FooTest extends SpecWithJUnit with MockServer {

"Foo" should {
 "fail" in new ctx {

    givenAListenerThatAlwaysFailsWhenExcecuted()
    foo.runMethodThatInvokesAListener
  }
 }
} 

trait MockServer extends BeforeAfterAll with MustMatchers {

  private val wireMockServer = new WireMockServer(wireMockConfig().port(9000))

  def givenAListenerThatAlwaysFailsWhenExcecuted() = {
    val listener = new RequestListener {
    override def requestReceived(request: Request, response: Response): Unit = {
    true must beFalse
  }
}
  wireMockServer.addMockServiceRequestListener(listener)
  listener
}

 override def beforeAll(): Unit = wireMockServer.start()
 override def afterAll(): Unit = wireMockServer.stop()
}

当我 运行 它时,我在控制台中看到了异常,但测试本身并没有失败。我如何让它失败?

您必须使用 MustThrownMatchers 而不是 MustMatchers,这样任何失败的预期(例如 true must beFalse 都会被抛出 new ctx { ... }

否则 true must beFalse 只是一个简单的 MatchResult[Boolean] 值,它很高兴在匿名 ctx class.

的主体内创建