【问题标题】:How to mock the CreateResponse<T> extension method on HttpRequestMessage如何模拟 HttpRequestMessage 上的 CreateResponse<T> 扩展方法
【发布时间】:2012-06-18 16:42:38
【问题描述】:

我正在使用 ASP.Net MVC 4 RC 的 ApiController,我正在尝试对 GET 方法进行单元测试。

此方法使用HttpRequestMessage 上的CreateResponse&lt;T&gt; 方法,但我不知道如何模拟它或使其正常运行。

方法的主体包含以下内容:

MediaTypeHeaderValue header = new MediaTypeHeaderValue(versionedSmartBlock.ContentType);
var response = Request.CreateResponse<SmartBlock>(
    HttpStatusCode.OK, versionedSmartBlock, header);

在我的单元测试中,我创建了一个空的HttpRequestMessage

CallsController api = new CallsController(
    managerMock.Object, config, adapterFactoryMock.Object);
api.Request = new HttpRequestMessage(
    HttpMethod.Get, "http://localhost/Initiate?ern=%2B44123456789");    
var response = api.Get("+44123456789", null);

但它只是生成一个InvalidOperationException

请求没有关联的配置对象或 提供的配置为空。

有没有人知道如何配置HttpRequestMessage 以便CreateResponse 方法真正发挥作用?

【问题讨论】:

标签: c# unit-testing asp.net-mvc-4 mocking


【解决方案1】:

通过指定一个空配置解决了这个问题:

request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration());

我从这里得到了答案

ASP.NET WebApi unit testing with Request.CreateResponse

【讨论】:

    【解决方案2】:

    这里是带有 VB 的 WebAPI 1!

    我设法混合了您上面链接中的响应,以使其像这样简单地工作:

    Dim request As HttpRequestMessage = New HttpRequestMessage()
    Return request.CreateResponse(HttpStatusCode.BadRequest, myCustomClassObject, GlobalConfiguration.Configuration)
    

    只是发布以防万一。

    【讨论】:

      猜你喜欢
      • 2017-12-27
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 2010-10-08
      相关资源
      最近更新 更多