2017-02-22 4 views
0

Ich versuche, im Grunde zu tun, was der Titel sagt, um meinen api-Controller zu testen, aber ich habe Probleme, den richtigen Weg zu finden und kann es sich nicht leisten zu viel Zeit dafür. Hier ist mein Code.Wie man eine HTTP-Post-Anfrage mit einem JSON-Body unter Verwendung von Moq erstellt

[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 

} 

Letzte Zeile kehrt CS0029 Fehler nicht implizit Typ konvertieren kann 'Moq.Mock System.Web.HttpContextBase' zu 'System.Web.Http.Controllers.HttpRequestContext'.

Ich bin mir auch nicht sicher über die Moq-Syntax, die ich verwenden sollte, andere Fragen, Beispiele und Moq-Dokumentation haben mir nicht viel geholfen.

Antwort

5

Keine Notwendigkeit, hier zu verspotten, wenn die Absicht nur eine Anfrage ist.

[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

Ich weiß, ich kann Moq für dieses Beispiel vermeiden, aber immer noch den Moq Weg herausfinden – D3v

Verwandte Themen