首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Request.CreateResponse进行ASP.NET WebApi单元测试

使用Request.CreateResponse进行ASP.NET WebApi单元测试
EN

Stack Overflow用户
提问于 2012-06-03 15:39:13
回答 4查看 58.9K关注 0票数 150

我正在尝试为我的ApiController编写一些单元测试,但遇到了一些问题。有一个名为Request.CreateResponse的很好的扩展方法,它对生成响应有很大帮助。

代码语言:javascript
复制
public HttpResponseMessage Post(Product product)
{
  var createdProduct = repo.Add(product);
  return this.Request.CreateResponse(HttpStatusCode.Created, createdProduct);
}

有没有办法不使用部分模拟或直接使用“CreateResponse HttpResponseMessage(...)”来模拟新的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-09 05:00:56

解决此问题的另一种方法是执行以下操作:

代码语言:javascript
复制
controller.Request = new HttpRequestMessage();
controller.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, 
                                  new HttpConfiguration());

如果您要升级到webapi 5.0,则需要将其更改为:

代码语言:javascript
复制
controller.Request = new HttpRequestMessage();
controller.Request.SetConfiguration(new HttpConfiguration());

之所以需要这样做,是因为您必须在控制器上填充Request,否则Request上的扩展方法将无法工作。您还必须在请求上设置HttpConfiguration,否则路由和管道的其他部分将无法正常工作。

票数 245
EN

Stack Overflow用户

发布于 2013-02-20 16:58:22

您可以为可测试性设置控制器对象,如下所示:

代码语言:javascript
复制
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上的综合博客文章。

票数 24
EN

Stack Overflow用户

发布于 2017-03-15 23:34:19

使用VB的WebAPI 1也有类似的问题。

我设法在这里混合响应,让它像这样简单地工作:

代码语言:javascript
复制
Dim request As HttpRequestMessage = New HttpRequestMessage()
Return request.CreateResponse(HttpStatusCode.BadRequest, myCustomClassObject, GlobalConfiguration.Configuration)

只是发布一下,以防对任何人有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10868673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档