2017-02-22 67 views
0

我試圖做的基本上是什麼標題說爲了單元測試我的API控制器,但我有問題找到正確的方法,並且無法承受支出這太多時間了。這是我的代碼。如何使用Moq創建使用JSON正文的模擬HTTP發佈請求

[TestMethod] 
public void Should_return_a_valid_json_result() 
{ 
    // Arrange 
    Search search = new Search(); 
    search.Area = "test"; 
    string json = JsonConvert.SerializeObject(search); 

    var context = new Mock<HttpContextBase>(); 
    var request = new Mock<HttpRequestBase>(); 

    request.Setup(r => r.HttpMethod).Returns("POST"); 
    request.Setup(r => r.InputStream.ToString()).Returns(json); 

    context.Setup(c => c.Request).Returns(request.Object); 

    var controller = new UserController(); 
    controller.ControllerContext = new HttpControllerContext() { RequestContext = context }; 

    //more code 

} 

最後一行將返回錯誤CS0029無法隱式轉換類型 'Moq.Mock System.Web.HttpContextBase' 到 'System.Web.Http.Controllers.HttpRequestContext'。

我也不確定我應該使用Moq語法,其他問題,示例和Moq文檔對我沒有多大幫助。

回答

5

如果意圖僅僅是通過請求,那麼無需在這裏模擬。

[TestMethod] 
public void Should_return_a_valid_json_result() { 
    // Arrange 
    var search = new Search(); 
    search.Area = "test"; 
    var json = JsonConvert.SerializeObject(search); 

    var request = new HttpRequestMessage(); 
    request.Method = HttpMethod.Post; 
    request.Content = new StringContent(json); 

    var controller = new UserController(); 
    controller.Request = request; 

    //more code 

} 
+0

我知道我可以避免Moq爲這個例子,但仍然想弄清楚莫克方式 – D3v

相關問題