2016-09-30 88 views
2

我有一個控制器的動作爲:懲戒HttpRequestMessage

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

//Do operations 
} 

我需要創建此方法的模擬,但我沒有得到如何通過參數「HttpRequestMessage」,

因爲如果有是任何要傳遞的變量,然後它只是初始化類型如字符串或整型。

如何在模擬中處理這種情況?

+0

創建請求的一個實例,填充與測試相關的內容並將其傳遞給待測試的方法。 – Nkosi

回答

0

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] 
} 

所以,如果你只需要設置RequestUri例如,您可以:

var requestMessage = new HttpRequestMessage() { RequestUri = new Uri("http://www.google.com") }; 
yourClassInstance.PostData(requestMessage); 

即使你需要添加一些標題或properties GetRequestContext can create HttpRequestContext from,你可以做

requestMessage.Headers.Add("h", "v"); 
requestMessage.Properties.Add("p", "v"); 

本設計(的的)完全不遵守函數式編程原則,但至少可以輕鬆地進行測試。