模拟HttpRequestMessage

时间:2016-09-30 06:44:53

标签: c# .net unit-testing c#-4.0

我有一个控制器操作:

[HttpPost]
[EnableQuery]
[ODataRoute("PostData")]
public async Task<string> PostData(HttpRequestMessage message)
{

//Do operations
}

我需要为这个方法创建一个模拟,但是我没有得到如何传递参数&#34; HttpRequestMessage&#34;,

因为如果有任何要传递的变量,那么它只是初始化类型为string或int。

如何在mock中处理这个条件?

1 个答案:

答案 0 :(得分:0)

$data = [[ 'country' => 'us', 'sector' => 'retail', ]]; 非常易变:

json_encode($data[0]);
// {"country":"us","sector":"retail"}

因此,如果您只需要设置HttpRequestMessage,您可以:

public class HttpRequestMessage : IDisposable
{
    [... ctors]

    public Version Version { get; set; }
    public HttpContent Content { get; set; }
    public HttpMethod Method { get; set; }
    public Uri RequestUri { get; set; }
    public HttpRequestHeaders Headers { get; }
    public IDictionary<string, object> Properties { get; }

    [... Dispose, ToString]
}

即使您需要添加一些标题或properties GetRequestContext can create HttpRequestContext from,也可以

RequestUri

这个设计(var requestMessage = new HttpRequestMessage() { RequestUri = new Uri("http://www.google.com") }; yourClassInstance.PostData(requestMessage); )根本不符合函数式编程原则,但至少你可以轻松地测试它。