代码之家  ›  专栏  ›  技术社区  ›  LordHits

单元测试MVC路由

  •  2
  • LordHits  · 技术社区  · 17 年前

    我有两条路线登记如下:

    routes.MapRoute("GetAnEmail", "{controller}", new { controller = "Home", action = "GetAnEmail" }, new { httpMethod = new HttpMethodConstraint("POST") })
    routes.MapRoute("Home", "{controller}/{action}", new { controller = "Home", action = "Index" })
    

    我对家用控制器进行了有效的单元测试,如下所示:

     [Test]
     public void CanVerifyRouteMaps()
         {
             "~/".Route().ShouldMapTo<HomeController>(x => x.Index());
         }
    

    我知道GetAnEmail是有效的,但是一个单元如何测试一个发布的路由呢?

    2 回复  |  直到 17 年前
        1
  •  2
  •   LordHits    17 年前

    Gratzy的答案很接近,但向我展示的只是如何通过代码发布帖子。

    我认为解决办法是在 Stephen Walther's blog post . 我在这里测试我的路径约束,这是关键。Stephen在他的示例中创建了一个假的httpContext。我将尝试使用Rhino Mocks来实现这一点,一旦我有了一个工作示例,我将发回。如果有人已经用Rhino Mock或Moq完成了这项工作,请也发布。

        2
  •  1
  •   Gratzy    17 年前

    您需要在单元测试中模拟post。

    System.Net.WebRequest req = System.Net.WebRequest.Create("your url");
    
    req.ContentType = "text/xml";
    req.Method = "POST";
    
    byte[] bytes = System.Text.Encoding.ASCII.GetBytes("Your Data");
    req.ContentLength = bytes.Length;
    os = req.GetRequestStream();
    os.Write(bytes, 0, bytes.Length); 
    
    
    System.Net.WebResponse resp = req.GetResponse();
    if (resp == null) return;
    System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
    
    str responsecontent = sr.ReadToEnd().Trim();
    
    推荐文章