IHTTPActionResult 自定义响应和 WebApi 2 的单元测试

IHTTPActionResult custom response and unit testing with WebApi 2

我创建了一个class如下

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

      }
   }

这是我在网络 api 调用中返回 IHTTPActionResult 的基础 class。 它很好地满足了我的要求。

我现在使用 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 变量上时,这两个都为空。

谁能指引我正确的方向?

谢谢

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