Я пытаюсь написать некоторые модульные тесты для моего ApiController и столкнулся с некоторыми проблемами. Есть хороший метод расширения, называемый Request.CreateResponse, который очень помогает при генерации ответа.
public HttpResponseMessage Post(Product product)
{
var createdProduct = repo.Add(product);
return this.Request.CreateResponse(HttpStatusCode.Created, createdProduct);
}
Есть ли способ смоделировать CreateResponse без использования частичных имитаций или прямого использования "new HttpResponseMessage (...)"?
CreateResponse
? Почему бы не утверждать на возвращаемые свойстваHttpResponseMessage
Content
иStatusCode
свойства, что установлены правильные значения?Ответы:
Другой способ решить эту проблему заключается в следующем:
Если вы обновляетесь до webapi 5.0, вам нужно изменить это на:
Причина, по которой вам нужно это сделать, заключается в том, что вы должны
Request
заполнить контроллер, иначе методы расширенияRequest
не будут работать. У вас также должен бытьHttpConfiguration
установлен запрос, иначе маршрутизация и другие части конвейера не будут работать правильно.источник
Вы можете настроить объект контроллера для тестируемости следующим образом:
Скопировано из подробного поста Питера Провоста о модульном тестировании ASP.NET Web API .
источник
Для Web API 2 вы можете просто добавить
Вот так
Смотрите здесь для получения дополнительной информации.
источник
WebAPI 1 здесь с похожей проблемой, используя VB.
Мне удалось смешать ответы здесь, чтобы заставить это работать так просто:
Просто отправка на случай, если это кому-нибудь поможет.
источник
В вашем тестовом классе создайте экземпляр класса контроллера. например
var customerController= new CustomerController();
источник