2017-02-22 41 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

相关问题