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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top