当从请求创建HttpResponseMessage时,应该如何测试API控制器?

时间:2012-08-15 13:31:45

标签: asp.net-web-api

现在当用HttpResponseMessage<T>创建响应的构造函数和内容消失时,如果要测试控制器,应该怎么做?应该使用Request.CreateResponse<T>代替,就像这样:

public HttpResponseMessage Post()
{
    // Do Something
    var response = Request.CreateResponse<SomeType>(System.Net.HttpStatusCode.OK, someObject);
    return response;
}

现在要测试这样的控制器,我必须存根Request对象,因为这是基类的属性,我应该用它来创建响应,但这不是我喜欢的东西,不知道是否我可以用其他方式做到吗?

2 个答案:

答案 0 :(得分:0)

根据我的经验,如果你不需要修改HttpResponseMessage,避免在ApiController中使用它,这将使你的代码更简单:

public SomeType Post()
{
     // Do Something
     return someObject;
}

如果无法避免,请回答:

ASP.NET WebApi unit testing with Request.CreateResponse

答案 1 :(得分:0)

如果你没有返回HttpResponseMessage,那么WebApi将调用MediaTypeFormatter来将结果写入响应流(即它将使用MediaTypeFormatter来创建{ {1}}对你而言)。许多默认实现将执行类似于上面的操作。最简单的解决方案是从您的函数返回HttpResponseMessage,然后使用其中一个内置SomeType来进行转换。您可以单独测试两种解决方案。