【问题标题】:Issue while testing route entries using mvccontrib test helper in MVC4在 MVC4 中使用 mvccontrib 测试助手测试路由条目时出现问题
【发布时间】:2012-09-24 16:01:58
【问题描述】:

我正在尝试为 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”的令牌?

提前致谢。

【问题讨论】:

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


    【解决方案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, ""));
    }
    

    【讨论】:

      【解决方案2】:

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

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

      然后:

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

      【讨论】:

      • 我无法更改签名,因为 InfoMsg 的默认值必须为 String.Empty
      猜你喜欢
      • 2011-02-15
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多