2012-04-17 4 views
7

Ciao, sto mettendo insieme il mio sito web e mentre è molto semplice ho deciso di testarne il maggior numero possibile. Utilizzando l'ethos di un solo scrivere test utili che potrebbero spiegare situazioni potevo immaginare accadendo (ridenominazione di uno script o un file css, ecc)Troppi test sulla vista semplice?

Sto usando framework di test MVC integrazione di Steve Sanderson e le mie prove sono al di sotto.

La mia domanda è doppia, questo livello di test è "troppo" e, in caso contrario, quali altri scenari (sia relativi allo sviluppatore come la ridenominazione o qualsiasi altra cosa) si può pensare.

using System.Web; 
using System.Web.Mvc; 
using MvcIntegrationTestFramework.Hosting; 
using NUnit.Framework; 
using website.Properties; 

namespace website.tests 
{ 
    [TestFixture] 
    public class HomeControllerIndexTests 
    { 
     [TestFixtureSetUp] 
     public void Setup() 
     { 
      appHost = AppHost.Simulate("Website"); 
     } 

     [Test] 
     public void HomeControllerIndexReturnsTheIndexView() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       Assert.AreEqual("Index", ((ViewResult)result.ActionExecutedContext.Result).ViewName); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexReturnsCorrectRouteData() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       Assert.AreEqual("Home", result.ActionExecutedContext.RouteData.Values["controller"]); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexReturnsViewResult() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       Assert.IsInstanceOf(typeof(ViewResult), result.ActionExecutedContext.Result); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexReturnsNoError() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       Assert.IsNull(result.ResultExecutedContext.Exception); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexReturnsViewWithSiteCssFile() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       Assert.IsTrue(result.ResponseText.Contains("/Content/Site.css")); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexReturnsViewWithCorrectTitle() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       Assert.IsTrue(result.ResponseText.ToLowerInvariant().Contains("<title>{ me: danielelliott.info(); }</title>")); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexReturnsViewContainingBanner() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       var expected = HttpUtility.HtmlEncode(Resources.SiteName); 
       Assert.IsTrue(result.ResponseText.Contains(expected)); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexViewIncludesBioParagraph() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       var expected = HttpUtility.HtmlEncode(Resources.Bio.ToLowerInvariant()); 
       Assert.IsTrue(result.ResponseText.ToLowerInvariant().Contains(expected)); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexViewIncludesServicesParagraph() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       var expected = HttpUtility.HtmlEncode(Resources.Services.ToLowerInvariant()); 
       Assert.IsTrue(result.ResponseText.ToLowerInvariant().Contains(expected)); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexViewIncludesHistoryParagraph() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       var expected = HttpUtility.HtmlEncode(Resources.History.ToLowerInvariant()); 
       Assert.IsTrue(result.ResponseText.ToLowerInvariant().Contains(expected)); 
      }); 
     } 

     private AppHost appHost; 
    } 
} 

risposta

1

Il test è sempre dipendente dal contesto ei rischi che si vedono dovrebbero guidare la quantità di test.

  • Quanto sarebbe critico se una parte non funzioni dopo qualche modifica?
  • Credi che queste parti potrebbero rompersi quando qualcosa è cambiato?
  • Quanto sarebbe importante mantenere questi test se la struttura della pagina cambierebbe?
  • Credi che queste parti cambino spesso? Paga per automatizzarli?
  • Per quanto tempo verranno eseguiti i test quando la quantità aumenta? Sei pronto ad aspettare quel momento per vedere spesso che le ultime modifiche non hanno infranto nulla?

Se la pagina non cambia molto spesso, questa quantità sembra molto. Puoi anche pensare se sarebbe sufficiente testare solo un campione di cose. Ad esempio, sembra che tu stia includendo più parti sulla pagina. Se provengono dalla stessa posizione e sono inclusi nello stesso meccanismo, sembra improbabile che includerne uno fallirebbe se altri fossero presenti.

D'altra parte, è sempre più facile ridurre la quantità. È possibile iniziare con questo quando si impara e quindi vedere se è necessario modificare l'approccio più tardi.

1

La mia reazione quando vedo i test è che essi verificano principalmente i dettagli di implementazione. Ti consiglierei di concentrarti sul comportamento. Testare le interazioni dell'utente finale con il sito. Verifica che l'informazione sia presente, non come è presentata.

+0

Ho provato a sottolineare che si trattava di test di integrazione. Accetto con tutto il cuore: test dei comportamenti nei test unitari! –