Vamos assumir que este é o meu método de ação
public IHttpActionResult Get(int id)
{
var status = GetSomething(id);
if (status)
{
return Ok();
}
else
{
return NotFound();
}
}
O teste será
var httpActionResult = controller.Get(1);
Como verifico meu código de status http depois disso?
c#
asp.net-web-api
asp.net-web-api2
tomar sol
fonte
fonte
Respostas:
Aqui
Ok()
está apenas um auxiliar para o tipoOkResult
que define o status da resposta comoHttpStatusCode.Ok
... para que você possa apenas verificar se a instância do resultado da sua ação é umOkResult
... alguns exemplos (escritos emXUnit
):fonte
Assert.IsInstanceOfType(httpActionResult, typeof(OkResult));
Created<T>(url,content)
seuCreatedNegotiatedContentResult
Created
não era um bom exemplo para aGet
operação ... eu mudei o código de status para um diferente agora ...OkNegotiatedContentResult<T>
quando você passar um objeto do tipoT
paraOk()
return new StatusCodeResult((HttpStatusCode)422, this);
Hora de ressuscitar uma pergunta morta
As respostas atuais dependem da conversão do objeto de resposta para um tipo conhecido. Infelizmente, as respostas não parecem ter uma hierarquia utilizável ou caminho de conversão implícito para que isso funcione sem um conhecimento íntimo da implementação do controlador. Considere o seguinte:
Testando a classe:
Fora da caixa preta, o fluxo de resposta é essencialmente o mesmo. O teste deve saber como o controlador implementou a chamada de retorno para testá-la dessa maneira.
Em vez disso, use o objeto HttpResponseMessage do IHttpActionResult retornado. Isso garante que o teste possa ser consistente, mesmo quando o código do controlador não for:
fonte
new HttpRequestMessage() {Properties = { { HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration() } }}
Esta é a resposta aceita por Kiran Challa, adaptada para NUnit;
fonte
https://docs.microsoft.com/pt-br/aspnet/web-api/overview/testing-and-debugging/unit-testing-controllers-in-web-api#testing-actions-that-return-ihttpactionresult
Assert.IsInstanceOfType (httpActionResult, typeof (OkResult));
fonte
Se IHttpActionResult contiver um objeto JSON, por exemplo, {"token": "A"}, podemos usar o seguinte código.
fonte
Após algumas horas de pesquisa e tentativas, finalmente descobri como testar completamente meus métodos da API da Web 2 que retornam
IHttpActionResult
e usam o middleware OWIN e a implementação padrão do ASP.NET Identity.Vou testar o
Get()
método da seguinte maneiraApiController
:Comece com uma classe base da qual todas as classes de teste herdarão:
O
InitializeApiController
método contém carne e batatas.Agora podemos escrever nossos testes para
AccountController
:Para que tudo funcione, você precisará instalar um monte de pacotes
Microsoft.OWIN.*
eMicrosoft.AspNet.*
colareipackages.config
aqui:O teste é muito simples, mas demonstra que tudo funciona :-)
Teste feliz!
fonte