Настройка IFILTERPROVIDER в тесте интеграции ASP.NET MVC
-
21-12-2019 - |
Вопрос
Я использую этот код для настройки моего приложения MVC в [Test] (для перезарядки и перемещения в [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;
.
По какой-то причине авторизеаэуэаттрибут, определенный в FilterProvider, никогда не пинает, но когда я проверяю приложение MVC вручную, он работает нормально.Я упускаю что-то с точки зрения настройки в этом тесте интеграции?
Решение
Фильтры вызываются как часть трубопровода запроса, поэтому они не будут запущены прямым вызовом метода действия, поскольку вы попали в ваш тест.
Я не думаю, что вы пропустите там много, потому что трубопровод запроса и его вызовов фильтров были сильно протестированы множеством других людей, поэтому вы можете просто написать тест напрямую против объекта фильтра.,
Другие советы
Я работал над библиотекой, чтобы помочь тестировать приложение ASP.NET-MVC со всеми там фильтрами, валидаторами, маршрутизацией и аутентификацией.В этом примере показано, как добавить пользовательский провайдер фильтра.Чтобы использовать его, вам нужно добавить пакет 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);
...
}
.
Больше примеров можно найти в Github https://github.com/ibrahimbensalah/xania.Aspnet.Simulator / Tree / Master / Xania.aspnet.simulator.tests