現在、私はMongoデータベースとインターフェースするScalaにREST APIを構築しています。問題のapiアクションは、ユーザーを「ユーザー」コレクションに作成します。ReactMongo Mockitoを使ってMockitoを使って例外を確認しました
ユニークなキー制約に違反するレコードを作成しようとすると、データベース・ドライバがDatabaseExceptionをスローするユニット・テストに関する問題をカバーしようとしています。 Mockitoを使用して、私はこれまでのところ、これを持っている:
describe("a mongo db error") {
val collection = mockCollection(Some("users"))
doThrow(GenericDatabaseException("Test exception", None))
.when(collection)
.insert(any(), any())(any(), any())
val userRequest = CreateUserRequest("test", "test", "test")
val request = FakeRequest().withJsonBody(Json.toJson(userRequest))
val result = call(controller.post, request)
val response = Json.fromJson[GenericResponse](contentAsJson(result)).get
it("should return a bad request") {
response.status must be("Failed")
}
}
これは、テスト対象のAPIメソッドである:
def post = Action.async(parse.json) { implicit request =>
request.body.validate[CreateUserRequest].map {
case model => {
collection flatMap { c =>
val hashedPassword = SecureHash.createHash(model.password)
c.insert(User(model.username, hashedPassword, model.emailAddress)) flatMap { r =>
c.indexesManager.ensure(Index(List(("username", IndexType.Ascending)), unique = true)) map { r =>
Ok
}
} recover {
case dex: DatabaseException => BadRequest(Json.toJson(GenericResponse("Failed")))
}
}
}
}.recoverTotal { e =>
val errorResponse = BadRequest(Json.obj(
"status" -> Messages("status.invalid"),
"message" -> Messages("error.generic.invalid_request")))
Future.successful(errorResponse)
}
私がテストを実行しても、このときに取得していますエラー:Checked exception is invalid for this method
と、私の限られたからScala、Javaの知識と例外処理のしくみについては、スローする例外が宣言されなければならないことを理解しています。そのため、このエラーが発生する可能性があります。
ここから進んで、このシナリオをテストするにはどうすればよいですか?それが価値あるものであれば、apiメソッドは手動テストで期待どおりに動作します。
https://github.com/cchantep/acolyte/tree/master/reactive-mongoをご覧ください。 – cchantep