4

我将 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] 成功 [failure] RouteTests.AdminProductShouldMapToIndex TestCase 'RouteTests.AdminProductShouldMapToIndex' 失败:预期产品但为管理员 MvcContrib.TestHelper.AssertionException 消息:预期产品但为管理员来源:MvcContrib.TestHelper StackTrace:RouteTests.cs(44, 0): 在 CBL.Traders.ControllerTests.RouteTests.AdminProductShouldMapToIndex()

4

1 回答 1

4

您的区域路线未在设置中注册。由于您只是调用 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);
}
于 2011-02-07T17:58:49.093 回答