ASP.NET MVC集成测试中的IFilterProvider设置
-
21-12-2019 - |
题
我正在使用此代码来在[测试]中设置我的mvc应用程序(重新考虑并移动到[设置]等):
// 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
不隶属于 StackOverflow