我有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路由?
答案 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();