Давайте предположим, что это мой метод действия
public IHttpActionResult Get(int id)
{
var status = GetSomething(id);
if (status)
{
return Ok();
}
else
{
return NotFound();
}
}
Тест будет
var httpActionResult = controller.Get(1);
Как я могу проверить мой код статуса http после этого?
Ответы:
Вот
Ok()
только помощник для типа,OkResult
который устанавливает статус ответа,HttpStatusCode.Ok
так что вы можете просто проверить, является ли экземпляр результата вашего действияOkResult
... некоторыми примерами (написано вXUnit
):источник
Assert.IsInstanceOfType(httpActionResult, typeof(OkResult));
Created<T>(url,content)
егоCreatedNegotiatedContentResult
Created
не был хорошим примером дляGet
операции ... Я изменил код состояния на другой сейчас ...OkNegotiatedContentResult<T>
когда вы передаете объект типаT
кOk()
return new StatusCodeResult((HttpStatusCode)422, this);
Время воскресить мертвый вопрос
Все текущие ответы зависят от приведения объекта ответа к известному типу. К сожалению, ответы не имеют пригодной для использования иерархии или неявного пути преобразования, чтобы это работало без глубоких знаний о реализации контроллера. Учтите следующее:
Тестирование класса:
Снаружи черного ящика поток ответов практически одинаков. Тест должен знать, как контроллер реализовал обратный вызов, чтобы проверить его таким образом.
Вместо этого используйте объект HttpResponseMessage из возвращенного IHttpActionResult. Это гарантирует, что тест может быть непротиворечивым, даже если код контроллера не может быть:
источник
new HttpRequestMessage() {Properties = { { HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration() } }}
Это принятый ответ Киран Чалла, адаптированный для NUnit;
источник
https://docs.microsoft.com/en-us/aspnet/web-api/overview/testing-and-debugging/unit-testing-controllers-in-web-api#testing-actions-that-return-ihttpactionresult
Assert.IsInstanceOfType (httpActionResult, typeof (OkResult));
источник
Если IHttpActionResult содержит объект JSON, например, {"token": "A"}, мы можем использовать следующий код.
источник
После нескольких часов исследований и попыток я наконец выяснил, как полностью протестировать мои методы Web API 2, которые возвращают
IHttpActionResult
и используют промежуточное программное обеспечение OWIN, и реализацию по умолчанию ASP.NET Identity.Я буду тестировать
Get()
метод на следующемApiController
:Начните с базового класса, который наследуют все тестовые классы:
InitializeApiController
Метод содержит мясо и картофель.Теперь мы можем написать наши тесты для
AccountController
:Чтобы все работало, вам нужно установить несколько пакетов
Microsoft.OWIN.*
иMicrosoft.AspNet.*
пакетов, я вставлюpackages.config
сюда:Тест очень прост, но показывает, что все работает :-)
Удачного тестирования!
источник