Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义消息的Xunit test IHttpActionResult web api 2函数_C#_Asp.net Web Api_Asp.net Web Api2_Xunit.net - Fatal编程技术网

C# 自定义消息的Xunit test IHttpActionResult web api 2函数

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

我重构了我的web api函数(以利用web api 2的更改),但不知道如何重构xUnit测试以测试自定义异常消息

我重构这个:

[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");