使用Web Api 2进行IHTTPActionResult自定义响应和单元测试

时间:2015-04-09 09:45:02

标签: c# unit-testing asp.net-web-api mstest asp.net-web-api2

我创建了一个类如下

public class Response<T> : IHttpActionResult where T : class
   {
      private readonly T _body;

      ....
      public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
      {
        HttpResponseMessage msg = new HttpResponseMessage();

        switch (_httpStatus)
        {
            case HttpResponseStatus.Ok:
            {
                msg = _request.CreateResponse(HttpStatusCode.OK, _body);
                break;
            }
             case HttpResponseStatus.BadRequest:
            {
                msg = _request.CreateResponse(HttpStatusCode.BadRequest, _body);
                break;
            }
            ...
            return Task.FromResult(msg);

      }
   }

这是我在web api调用中返回IHTTPActionResult的基类。 它适用于我所需要的。

我现在使用MSTest设置了一些单元测试。

            // Act
            IHttpActionResult result = controller.Step1();  


            // Assert
            Assert.IsNotNull(result, "Is null when it shouldnt be");
            Assert.IsInstanceOfType(result, typeof(Response<BodyContent<LogingActivityResult>>), "Is not expected IsInstanceOfType");

这两个断言都可以正常工作。 但是我现在想要实际获得@我的回复中保存的数据,并声称它们没问题,即:正确的值,计数等,但我没有运气。 我已经尝试了所有各种System.Web.Http.Results类型,如

var contentResult = result as OkNegotiatedContentResult<Response<BodyContent<LogingActivityResult>>>;

var contentResult = result as FormattedContentResult<Response<BodyContent<LogingActivityResult>>>;

但当我将鼠标悬停在contentResult变量上时,这两个都为null。

有人能引导我朝正确的方向前进吗?

由于

1 个答案:

答案 0 :(得分:0)

我设法解决了这个..我上面的类中的属性_body被设置为PRIVATE,因此我无法在我的单元测试类中访问它。将其设置为PUBLIC解决了它,并且能够访问响应中返回的数据。