C# 自定义消息的Xunit test IHttpActionResult web api 2函数
我重构了我的web api函数(以利用web api 2的更改),但不知道如何重构xUnit测试以测试自定义异常消息 我重构这个:C# 自定义消息的Xunit test IHttpActionResult web api 2函数,c#,asp.net-web-api,asp.net-web-api2,xunit.net,C#,Asp.net Web Api,Asp.net Web Api2,Xunit.net,我重构了我的web api函数(以利用web api 2的更改),但不知道如何重构xUnit测试以测试自定义异常消息 我重构这个: [Route("resetpassword"), HttpPost] public HttpResponseMessage ResetPassword([FromBody] ResetPasswordRequest request) { try { var resetPermission = _userPasswordResetRequestRepo
[Route("resetpassword"), HttpPost]
public HttpResponseMessage ResetPassword([FromBody] ResetPasswordRequest request)
{
try
{
var resetPermission = _userPasswordResetRequestRepository.GetByToken(request.Token);
if (resetPermission.Expires < DateTimeOffset.Now)
throw new Exception("Token expired");
_userPasswordRepository.SetPassword(resetPermission.UserId, request.Password);
return Request.CreateResponse(HttpStatusCode.OK, "Request received");
}
catch (Exception ex)
{
return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message);
}
}
[路由(“重置密码”),HttpPost]
公共HttpResponseMessageResetPassword([FromBody]ResetPasswordRequest请求)
{
尝试
{
var resetPermission=\u userPasswordResetRequestRepository.GetByToken(request.Token);
if(resetPermission.Expires
对此(返回类型更改为IHttpActionResult,返回语句更改):
[路由(“重置密码”),HttpPost]
公共IHttpActionResult ResetPassword([FromBody]ResetPasswordRequest请求)
{
尝试
{
var resetPermission=\u userPasswordResetRequestRepository.GetByToken(request.Token);
if(resetPermission.Expires
我的xUnit测试失败:
[Theory]
[InlineData(-10, true)]
[InlineData(10, false)]
public void IfTokenExpired_ShouldReturnError(int expireOffsetMinutes, bool shouldBeExpired)
{
...
// Assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode); // <-- fail
if (shouldBeExpired)
Assert.Equal("Token expired.", response.ContentString()); // <-- fail
}
[理论]
[在线数据(-10,真)]
[在线数据(10,错误)]
公共无效IfTokenExpired\u ShouldReturnError(int expireOffsetMinutes,bool shouldExpired)
{
...
//断言
Assert.Equal(HttpStatusCode.OK,response.StatusCode);//我正在看这个答案:
但是,返回Ok(“收到请求”);返回OkNegotiatedContentResult,而不是OkResult
因此:
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
Assert.Equal("Token expired", response.ContentString())
我换成这样:
Assert.IsType<OkNegotiatedContentResult<string>>(response);
Assert.Equal(((OkNegotiatedContentResult<string>)response).Content, "Token expired");
Assert.IsType(响应);
Assert.Equal(((OkNegotiatedContentResult)响应).Content,“令牌已过期”);
异常会生成什么样的响应?只需将响应转换为该响应即可(例如,HTTP 200的OkengotiatedContentResult)
Assert.IsType<OkNegotiatedContentResult<string>>(response);
Assert.Equal(((OkNegotiatedContentResult<string>)response).Content, "Token expired");