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

时间:2023-02-26
本文介绍了如何模拟 CreateResponse<T>HttpRequestMessage 上的扩展方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

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

I'm using ASP.Net MVC 4 RC's ApiController and I'm trying to unit test a GET method.

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

This method uses the CreateResponse<T> method that's on the HttpRequestMessage, but I've no idea how to mock this or to make it function correctly.

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

The method's body contains this:

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

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

Within my unit test, I create an empty 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:

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

The request does not have an associated configuration object or the provided configuration was null.

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

Has anyone got any pointers on how I can configure the HttpRequestMessage so that the CreateResponse method actually does its job?

推荐答案

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

This was solved by specifying an empty configuration:

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

我从这里得到了答案

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

这篇关于如何模拟 CreateResponse&lt;T&gt;HttpRequestMessage 上的扩展方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

上一篇:调用静态方法的单元测试方法的模式或实践 下一篇:单元测试 HttpContext.Current.Cache 或 C# 中的其他服务器端方法?

相关文章

最新文章