Модульное тестирование MVC маршрутов, которые POST - PullRequest
2 голосов
/ 15 июня 2009

У меня есть 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 работает, но как один модуль тестирует POST-маршрут?

Ответы [ 2 ]

2 голосов
/ 17 июня 2009

Ответ Гратзи близок, но все, что мне показывает, это как сделать POST через код.

Я думаю, что решение подсказано в Стивен Вальтер в блоге . Я действительно проверяю свое ограничение маршрута здесь, которое является ключевым. Стивен создает фальшивый httpContext в своем примере. Я собираюсь попробовать это с Rhino Mocks, и как только у меня будет рабочий пример, я отправлю ответ. Если кто-то уже сделал это с Rhino Mock или Moq, пожалуйста, пишите также.

1 голос
/ 15 июня 2009

Вам нужно смоделировать пост в вашем модульном тесте.

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