单元测试POST的MVC路由

时间:2009-06-15 02:50:46

标签: asp.net-mvc unit-testing routes mvccontrib

我有2条路线注册如下:

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

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

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

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

2 个答案:

答案 0 :(得分:2)

Gratzy的答案很接近,但所有告诉我的是如何通过代码进行POST。

我认为解决方案在Stephen Walther's blog post中有所暗示。我真的在这里测试我的路线约束,这是关键。斯蒂芬在他的例子中创建了一个虚假的httpContext。我将尝试使用Rhino Mocks,一旦我有一个有效的例子,就会回复。如果有人已经使用Rhino Mock或Moq做过这个,请发布。

答案 1 :(得分:1)

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

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();