4

MvcContribHelpTesterでMVC2を使用しています。

エリア内にあるコントローラーのテストに問題があります。

これが私のテストクラスです:

[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] success [failure] RouteTests.AdminProductShouldMapToIndex TestCase'RouteTests.AdminProductShouldMapToIndex' failed:Expected Product but was Admin MvcContrib.TestHelper.AssertionException Message:Expected Product but was Admin Source: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 に答える