2017-02-22 65 views
0

Я пытаюсь сделать в основном то, что говорится в заголовке, чтобы провести тестирование моего контроллера api, но у меня проблемы с поиском надлежащего пути и не могу позволить себе потратить слишком много времени на это. Вот мой код.Как создать mock-запрос HTTP-сообщения с телом JSON с использованием Moq

[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 для этого примера, но все же хочу выяснить способ Moq – D3v