Configurazione di IFILTERPROVERIDER nel test di integrazione MVC ASP.NET
-
21-12-2019 - |
Domanda
Sto usando questo codice per configurare la mia app MVC in un [Test] (da riformare e spostato in [Setup] ecc.):
// 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;
.
Per qualche motivo, l'autorizzazione autorizzato definito in FilterProvider non viene mai calciato, ma quando testo manualmente l'app MVC funziona bene.Mi manca qualcosa in termini di installazione in questo test di integrazione?
Soluzione
I filtri vengono richiamati come parte della pipeline di richiesta in modo che non vengano attivati da un'invocazione diretta di un metodo di azione come hai nel tuo test.
Non penso che ti stia perdiamo molto però, perché la pipeline di richiesta e il suo invocante di filtri sono stati pesantemente testati da molte altre persone, quindi puoi semplicemente scrivere il test direttamente contro l'oggetto del filtro.
Altri suggerimenti
Ho lavorato su una libreria per aiutare a testare l'applicazione ASP.NET-MVC con tutti i filtri, i validatori, il routing e l'autenticazione.Questo esempio mostra come aggiungere un fornitore di filtri personalizzati.Per usarlo, hai bisogno di aggiungere un pacchetto Nuget xania.aspnet.simulator.
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);
...
}
.
Altri esempi possono essere trovati su GitHub https://github.com/ibrahimbensalah/xania.Aspnet.simolatore / albero / master / xania.aspnet.simulator.tests