私はプレイ フレームワーク 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)