MvcContrib测试助手问题

时间:2010-05-03 15:58:47

标签: asp.net-mvc testing mvccontrib

我正在使用MVC2和MvcContrib HelpTester。

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

这是我的Test类:

[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,1):at CBL.Traders.ControllerTests.RouteTests.AdminProductShouldMapToIndex()

1 个答案:

答案 0 :(得分: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);
}