我正在使用此代码来在[测试]中设置我的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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top