2009-06-15 7 views
2

J'ai 2 itinéraires enregistrés comme suit:tests unitaires routes MVC que le POST

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

J'ai un test unitaire valable pour le contrôleur Home comme suit:

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

je sais fonctionne GetAnEmail, mais Comment une unité teste-t-elle un itinéraire POSTé?

Répondre

2

La réponse de Gratzy est proche mais tout ce qui me montre est comment faire un POST à ​​travers le code. Je pense que la solution est suggérée par Stephen Walther's blog post. Je vérifie vraiment la contrainte de ma route ici, ce qui est la clé. Stephen crée un faux httpContext dans son exemple. Je vais essayer avec Rhino Mocks et une fois que j'ai un exemple, je reviendrai. Si quelqu'un l'a déjà fait avec Rhino Mock ou Moq, merci de poster aussi.

+0

Bonjour, avez-vous déjà résolu cela? – rohancragg

1

Vous devez simuler une publication dans votre test unitaire.

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