如何模拟HttpRequestMessage上的CreateResponse <T>扩展方法

我正在使用ASP.Net MVC 4 RC的ApiController,我试图unit testing一个Get方法。

这个方法使用HttpRequestMessage上的CreateResponse方法,但我不知道如何模拟这个或使其正常工作。

该方法的主体包含这个:

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

在我的unit testing中,我创build了一个空的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:

该请求没有关联的configuration对象,或者提供的configuration为空。

有没有人有任何关于如何configurationHttpRequestMessage,以便CreateResponse方法实际上它的工作的指针?

这是通过指定一个空的configuration来解决的:

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

我从这里得到了答案

ASP.NET WebApiunit testing与Request.CreateResponse

WebAPI 1与VB在这里!

我设法混合来自上面的链接的响应,以使其工作如此简单:

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

只是张贴,以防万一它帮助任何人。