o programa de configuração do IFilterProvider em asp.net mvc teste de integração
-
21-12-2019 - |
Pergunta
Eu estou usando este código para configurar o meu mvc aplicativo em um [Teste] (para voltar a ser fatorado e mudou-se em [Setup], etc.):
// arrange
var mockSomeService = new Mock<ISomeService>();
mockSomeService.Setup(m => m.IsTrue()).Returns(false);
RouteConfig.RegisterRoutes(RouteTable.Routes);
FilterProviders.Providers.Add(new FilterProvider(mockSomeService.Object));
var controller = new HomeController();
// act
var result = controller.Index() as ViewResult;
por algum motivo, o AuthorizeAttribute definido no FilterProvider nunca é chute, mas quando eu testar o mvc aplicativo manualmente, funciona bem.Eu estou faltando alguma coisa em termos de configuração neste teste de integração?
Solução
Os filtros são invocados como parte do pipeline de solicitação, para que eles não obter acionado por um direto de invocação de um método de ação como você tem em seu teste.
Eu não acho que você está perdendo muito por aí, porém, porque o pipeline de solicitação e sua invocação de filtros tem sido muito testada por muitas outras pessoas, então você pode apenas escrever seu teste diretamente contra o filtro de objeto em vez disso.
Outras dicas
Eu tenho trabalhado em uma biblioteca para ajudar a testar a asp.net-mvc aplicação com todos lá filtros, validação, encaminhamento e autenticação.Este exemplo mostra como adicionar um filtro personalizado fornecedor.Para usá-lo você precisa adicionar um pacote do nuget Xania.AspNet.Simulador.
using Xania.AspNet.Simulator;
.....
[Test]
public void CustomFilterProviderTest()
{
// arrange
var action = new AccountController().Action(c => c.ChangePassword(null));
action.FilterProviders.Add(new CustomFilterProvider());
// act
var result = action.Execute();
// assert
Assert.AreEqual("Your Message", result.ViewBag.Message);
Assert.IsTrue(result.ModelState.IsValid);
Assert.IsInstanceOf<ViewResult>(result.ActionResult);
...
}
Mais exemplos podem ser encontrados no github https://github.com/ibrahimbensalah/Xania.AspNet.Simulator/tree/master/Xania.AspNet.Simulator.Tests