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