如何在HttpRequestMessage上模拟CreateResponse <t>扩展方法</t>

时间:2012-06-15 15:21:03

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

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

此方法使用CreateResponse<T>上的HttpRequestMessage方法,但我不知道如何模拟此方法或使其正常运行。

该方法的正文包含:

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方法真正发挥作用?

2 个答案:

答案 0 :(得分:158)

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

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

我从这里得到答案

ASP.NET WebApi unit testing with Request.CreateResponse

答案 1 :(得分:0)

WebAPI 1与VB在这里!

我设法从上面的链接中获得混合响应,以使其工作如此简单:

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

只是发布以防万一。