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 解决了它并且能够访问响应中返回的数据。
我创建了一个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 解决了它并且能够访问响应中返回的数据。