1

私はプレイ フレームワーク 2.5 とシルエット ライブラリを scala 2.11 で使用しています。そしてplay specs2とmockitoを使ってテストコードを書いています。今、私は例外をスローするためにモックを試みてきました。ただし、モックは呼び出される前に常に NullPointerException をスローします。

これがテストコードのターゲットです。

class TestController @Inject() (
  ...
  silhouette: Silhouette[DefaultEnv]) extends Controller {

  def target() = silhouette.SecuredAction.async { implicit request =>
    try {
      silhouette.env.authenticatorService.discard(request.authenticator, Ok)
    } catch {
      case t: Throwable =>
        Future.successful(InternalServerError(...))
    }
  }
}

以下のようなテストコード。

class TestControllerSpec extends PlaySpecification with Mockito {
  ...
  trait Context extends Scope {
    val mockTest = mock[Silhouette[DefaultEnv]]

    // This always throws a NullPointerException.
    mockTest.env.authenticatorService.discard(any[JWTAuthenticator], any[Result])(any[RequestHeader]) throws new AuthenticatorDiscardingException("AuthenticatorDiscardingException")

    lazy val appMock = new GuiceApplicationBuilder()
      .overrides(new FakeModule)
      .overrides(bind[Silhouette[DefaultEnv]].toInstance(mockTest))
      .build
  }
  ...
}

次のようなエラー メッセージが表示されます。

[error]      java.lang.NullPointerException: null (TestControllerSpec.scala:123)
[error] controllers.TestControllerSpec$$anonfun$29$Context$1$$anonfun$40.apply(TestControllerSpec.scala:123)
[error] controllers.TestControllerSpec$$anonfun$29$Context$1$$anonfun$40.apply(TestControllerSpec.scala:123)
[error] controllers.TestControllerSpec$$anonfun$29$Context$1$class.$init$(TestControllerSpec.scala:123)
[error] controllers.TestControllerSpec$$anonfun$29$$anonfun$apply$16$$anonfun$apply$18$$anon$32.<init>(TestControllerSpec.scala:393)
[error] controllers.TestControllerSpec$$anonfun$29$$anonfun$apply$16$$anonfun$apply$18.apply(TestControllerSpec.scala:393)
[error] controllers.TestControllerSpec$$anonfun$29$$anonfun$apply$16$$anonfun$apply$18.apply(TestControllerSpec.scala:393)
4

0 に答える 0