2017-02-22 18 views
0

私は基本的にタイトルのことを私のapiコントローラをテストするために言うとしていますが、適切な方法を見つけるのに問題があり、これにはあまりにも時間がかかります。ここに私のコードです。Moqを使用してJSON本体で模擬HTTP POST要求を作成する方法

[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は、暗黙のうちに 'System.Web.Http.Controllers.HttpRequestContext' にタイプ 'Moq.Mock System.Web.HttpContextBase' を変換できません返します。

また、使用する必要がある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を避けることができますが、まだMoqの方法を理解したいと思います – D3v

関連する問題