【问题标题】:MvcContrib Test Helper problemMvcContrib 测试助手问题
【发布时间】:2011-02-15 02:31:07
【问题描述】:

我正在使用 MVC2 和 MvcContrib HelpTester。

我在测试区域中的控制器时遇到问题。

这是我的测试课:

[TestFixture]
    public class RouteTests
    {


        [TestFixtureSetUp]
        public void Setup()
        {
            RouteTable.Routes.Clear();
            MvcApplication.RegisterRoutes(RouteTable.Routes);
        }

        [Test]
        public void RootMatchesHome()
        {
            "~/".ShouldMapTo<TradersSite.Controllers.HomeController>(x => x.Index());

        }


        [Test]
        public void AdminProductShouldMapToIndex()
        {
            "~/Admin/Produit/".ShouldMapTo<TradersSite.Areas.Admin.Controllers.ProductController>(x => x.Index());

        }

这是我的 ProductController 在管理区域中的操作索引:

public ActionResult Index(int? page)
        {
            int pageSize = 10;
            int startIndex = page.GetValueOrDefault() * pageSize; 

            var products = _productRepository.GetAllProducts()
                                             .Skip(startIndex)
                                             .Take(pageSize);

            return View("Index", products);
        }

这是我的 AdminAreaRefistration 中的路线图:

public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Admin_default",
                "Admin/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }

最后是我从 MbUnit 收到的消息:

[fixture-setup] 成功 [失败] RouteTests.AdminProductShouldMapToIndex TestCase 'RouteTests.AdminProductShouldMapToIndex' 失败:预期产品但为管理员 MvcContrib.TestHelper.AssertionException 消息:预期产品但为管理员 来源:MvcContrib.TestHelper 堆栈跟踪: RouteTests.cs(44,0):在 CBL.Traders.ControllerTests.RouteTests.AdminProductShouldMapToIndex()

【问题讨论】:

    标签: asp.net-mvc testing mvccontrib


    【解决方案1】:

    您的区域路线未在设置中注册。由于您只是调用 RegisterRoutes,它(默认情况下)不会注册区域,因此它会被遗漏。

    您可以想办法直接调用 AreaRegistration.RegisterAllAreas() (通常在应用启动时调用,或者您需要手动注册要测试的每个区域。在您的情况下,以下方法可行:

    public void Setup()
    {
        RouteTable.Routes.Clear();
    
        var adminArea = new AdminAreaRegistration();
        var context = new AreaRegistrationContext("Default", RouteTable.Routes);
        adminArea.RegisterArea(context);
    
        MvcApplication.RegisterRoutes(RouteTable.Routes);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多