C# 使用WebApi 2进行IHTTPActionResult自定义响应和单元测试

C# 使用WebApi 2进行IHTTPActionResult自定义响应和单元测试,c#,unit-testing,asp.net-web-api,mstest,asp.net-web-api2,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) { HttpRespon

我创建了一个类,如下所示

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

      }
   }
公共类响应:IHttpActionResult,其中T:class
{
私有只读T_体;
....
公共任务执行同步(CancellationToken CancellationToken)
{
HttpResponseMessage msg=新的HttpResponseMessage();
开关(httpStatus)
{
案例HttpResponseStatus。确定:
{
msg=\u request.CreateResponse(HttpStatusCode.OK,\u body);
打破
}
案例HttpResponseStatus.BadRequest:
{
msg=\u request.CreateResponse(HttpStatusCode.BadRequest,\u body);
打破
}
...
返回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");
//Act
IHttpActionResult=controller.Step1();
//断言
IsNotNull(结果,“不应该为空时为空”);
Assert.IsInstanceOfType(结果,typeof(响应),“不应为IsInstanceOfType”);
这两种断言都很有效。 然而,我现在想实际获取我的响应中包含的@数据,并断言它们是正确的,即:正确的值、计数等,但我对此没有运气。 我尝试了各种System.Web.Http.Results类型,例如

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

var contentResult=结果为FormattedContentResult;
但当我将鼠标悬停在contentResult变量上时,这两个变量都为null

谁能把我引向正确的方向


感谢

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

即时窗口->
结果。GetType()
var contentResult = result as FormattedContentResult<Response<BodyContent<LogingActivityResult>>>;