在MVC4中使用mvccontrib测试助手测试路由条目时发出问题

时间:2012-09-24 16:01:59

标签: asp.net-mvc c#-4.0 tdd mvccontrib

我正在尝试为Route条目编写测试方法,在我的路由配置中,有很多条目用于不同的操作。我正在使用MvcContrib.TestHelper进行测试。我是MVC和TDD的新手。请帮我解决这个问题。我的测试用例失败了,我该怎么办才能通过。

路线录入

 routes.MapRoute(
            name: "X1Details",
            url: "X1/{X1ID}",
            defaults: new { controller = "X1", action = "Index", X1ID = "X1ID" }
            );

X1Controller

   public ActionResult Index(int? instanceID = 0,  string  InfoMsg ="")
   {
   }

测试方法

[Test Method]
     public void Should_Route_X1Index()
            {

                "~/X1/"
                    .ShouldMapTo<X1Controller>(action => action.Index(null, ""));

            }

错误

  

测试方法   XXX.Tests.MVCContibRouteMapTest.Should_Route_X1IndexOf   抛出异常:MvcContrib.TestHelper.AssertionException:值为   参数'InfoMsg'不匹配:预期''但是'';没有价值   在名为'InfoMsg'的路由上下文操作参数中找到 - 确实如此   您的匹配路由包含一个名为“InfoMsg”的标记?

提前致谢。

2 个答案:

答案 0 :(得分:1)

我发现这种方法可以使你的控制器保持不变

[Test Method]
public void Should_Route_X1Index()
{
     var routeData = "~/X1/".Route();
     routeData.Values["InfoMsg "] = "";
     routeData.Values["instanceID"] = "0";
     routeData.ShouldMapTo<X1Controller>(action => action.Index(0, ""));
}

答案 1 :(得分:0)

默认值不适用于MVCContrib助手。您可以像这样修改控制器操作:

public ActionResult Index(int? instanceID, string InfoMsg)
{
    ...
}

然后:

"~/X1".ShouldMapTo<X1Controller>(action => action.Index(null, null));