我正在使用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()
答案 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);
}