2009-04-15 5 views
2

Ich suche nach ordentlichen Vorschlägen, wie die Leute ihre Controller-Tests organisieren.Wie organisieren Sie Ihre MVC-Controller-Tests?

Nehmen wir zum Beispiel die „add“ Funktionalität meiner „Adresse“ Controller,

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Add() 
{ 
    var editAddress = new DTOEditAddress(); 
    editAddress.Address = new Address(); 
    editAddress.Countries = countryService.GetCountries(); 

    return View("Add", editAddress); 
} 

[RequireRole(Role = Role.Write)] 
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Add(FormCollection form) 
{ 
    // save code here 
} 

ich eine Befestigung "when_adding_an_address" genannt haben könnte, aber es gibt zwei Aktionen i unter diesem Titel zu testen, müssen ...

Ich möchte nicht beide Aktionen in meiner Act() Methode in meiner Fixture aufrufen, also teile ich die Fixture in zwei Hälften, aber wie nenne ich sie dann?

"When_adding_an_address_GET" und "When_adding_an_address_POST"?

Dinge scheint einfach nur chaotisch zu werden, schnell.

Wie gehen Sie auch mit Stateless/Setupless Assertions für Controller, und wie ordnen Sie diese in Bezug auf die oben genannten? zum Beispiel:

[Test] 
public void the_requesting_user_must_have_write_permissions_to_POST() 
{ 
    Assert.IsTrue(this.SubjectUnderTest.ActionIsProtectedByRole(c => c.Add(null), Role.Write)); 
} 

Dies ist i benutzerdefinierter Code kennen, aber man sollte auf die Idee kommen, überprüft es einfach, dass ein Filter-Attribut für das Verfahren vorhanden ist. Der Punkt ist es erfordert keine Arrange() oder Act().

Alle Tipps willkommen!

Danke

Antwort

0

Nun, 13 Monate später und keine Antworten. Genial.

Heres, was ich jetzt tun:

/tests/controllers/address/add/get.cs 
/tests/controllers/address/add/valid.cs 
/tests/controllers/address/add/invalid.cs 
1

Meiner Meinung nach sollten Sie vergessen Sie Ihre Tests nach den Methoden zu benennen Sie testen. Tatsächlich ist das Testen einer einzelnen Methode ein seltsames Konzept. Sie sollten eine einzelne Sache testen, die ein Client mit Ihrem Code macht. Wenn Sie zum Beispiel mit einem POST und einem GET kommen, sollten Sie zwei Tests schreiben, wie Sie es vorgeschlagen haben. Wenn Sie sehen möchten, was in einem bestimmten Ausnahmefall passiert, sollten Sie einen anderen Test schreiben.

Ich nehme in der Regel Namen, die einen Betreuer sagen, was er in Java wissen muss:

@Test public void shouldRedirectToGetWhenPostingToAdd(){ 
    //... 
} 

Sie können diese in jeder beliebigen Sprache tun und jede * DD Namenskonvention wählen, wenn Sie mögen, aber der Punkt ist, dass Der Testname sollte die Erwartungen und das Szenario vermitteln. Sie werden auf diese Weise einen sehr kleinen Test bekommen und ich halte das für eine gute Sache.