我正在尝试为我的ApiController编写一些单元测试,但遇到了一些问题。有一个名为Request.CreateResponse的很好的扩展方法,它对生成响应有很大帮助。
public HttpResponseMessage Post(Product product)
{
var createdProduct = repo.Add(product);
return this.Request.CreateResponse(HttpStatusCode.Created, createdProduct);
}
有没有办法不使用部分模拟或直接使用“CreateResponse HttpResponseMessage(...)”来模拟新的?
发布于 2012-06-09 05:00:56
解决此问题的另一种方法是执行以下操作:
controller.Request = new HttpRequestMessage();
controller.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey,
new HttpConfiguration());
如果您要升级到webapi 5.0,则需要将其更改为:
controller.Request = new HttpRequestMessage();
controller.Request.SetConfiguration(new HttpConfiguration());
之所以需要这样做,是因为您必须在控制器上填充Request
,否则Request
上的扩展方法将无法工作。您还必须在请求上设置HttpConfiguration
,否则路由和管道的其他部分将无法正常工作。
发布于 2013-02-20 16:58:22
您可以为可测试性设置控制器对象,如下所示:
var config = new HttpConfiguration();
var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/api/products");
var route = config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}");
var routeData = new HttpRouteData(route, new HttpRouteValueDictionary { { "controller", "products" } });
controller.ControllerContext = new HttpControllerContext(config, routeData, request);
controller.Request = request;
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
摘自Peter Provost在Unit Testing ASP.NET Web API上的综合博客文章。
发布于 2017-03-15 23:34:19
使用VB的WebAPI 1也有类似的问题。
我设法在这里混合响应,让它像这样简单地工作:
Dim request As HttpRequestMessage = New HttpRequestMessage()
Return request.CreateResponse(HttpStatusCode.BadRequest, myCustomClassObject, GlobalConfiguration.Configuration)
只是发布一下,以防对任何人有帮助。
https://stackoverflow.com/questions/10868673
复制相似问题