69

我正在使用 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方法真正发挥作用有任何指示?

4

2 回答 2

159

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

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

我从这里得到了答案

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

于 2012-06-15T16:57:05.420 回答
0

WebAPI 1 与 VB 在这里!

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

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

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

于 2017-03-15T15:37:27.307 回答