如何解决为什么测试用例抛出异常而不是发送JSON响应
我正在测试我的代码的这一部分,当接收到异常时,它应该返回一个json
响应。
val res = for(result<-service.handleTransaction(profile)) yield {
Ok(Json.toJson(JsonResultSuccess((messagesApi("success.userSignupConfirmationEmailSent"))(langs.availables(0)))))
}
res.recover {
case exception: UnconfirmedUserException => {
logger.trace(s"unconfirmed user")
Ok(Json.toJson(JsonResultSuccess((messagesApi("success.userSignupConfirmationEmailSent"))(langs.availables(0)))))
}
case exception => {
logger.trace(s"got error in handling transaction ${exception}")
Ok(Json.toJson(JsonResultError(exception.getMessage)))
}
我正在测试以下代码
"test that signup request from an existing un-confirmed user should be successful" in {
val jsonBody = Json.parse(
"""
{
"external-profile":{
"email":"test@test.com","firstname":"fn","lastname":"ln","password":"aA1!1111"
}
}
""")
val userTestEnv = new UserControllerSpecTestEnv(components=components)
val exceptionInProcessing = new UnconfirmedUserException(userTestEnv.testEnv.user)
when(userTestEnv.mockService.handleTransaction(ArgumentMatchers.any[UserProfile]))
.thenReturn(
Future.failed(exceptionInProcessing)
)
val request: Request[AnyContentAsJson] = FakeRequest("POST","ws/users/signup",Headers(("someH" -> "someV")),new AnyContentAsJson(jsonBody))
logger.trace(s"sending sign up request ${request}")
val response = userTestEnv.controller.signupUser(request)
val responseBodyAsJsValue = contentAsJson(response)
logger.trace(s"received response of sign up ${responseBodyAsJsValue}")
val result = (responseBodyAsJsValue \ "result").get.as[String]
val message = (responseBodyAsJsValue \ "additional-info").get.as[String]
//responseBodyAsJsValue.\("result").
result mustBe "success"
message mustBe components.messagesApi("success.userSignupConfirmationEmailSent")(components.langs.availables(0))
}
上面的测试失败了,因为异常没有停止在userTestEnv.controller.signupUser(request)
我必须使用intercept
来处理测试用例
"test that error is returned if processing on sign up request fails" in {
...
val receivedException = intercept[UnconfirmedUserException](await[Result](userTestEnv.controller.signupUser(request))(Timeout(Duration(5000,"millis"))))
logger.trace(s"exception is ${receivedException}")
receivedException.getMessage() mustBe exceptionInProcessing.getMessage
...
}
为什么我必须使用intercept
? userTestEnv.controller.signupUser(request)
是否应该处理异常并返回响应?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。