2012-04-17 8 views
7

Hola estoy armando mi sitio web y, aunque es muy simple, decidí probar tantos aspectos como pude. Usando el espíritu de solo escribir pruebas útiles que podrían dar cuenta de situaciones que podría imaginar sucediendo (cambio de nombre de un script o archivo css, etc.)¿Demasiadas pruebas en vista simple?

Estoy usando el marco de prueba de integración MVC de Steve Sanderson y mis pruebas están a continuación.

Mi pregunta es doble, es este nivel de prueba "demasiado" y si no, ¿qué otros escenarios (relacionados con el desarrollador como el cambio de nombre o cualquier otra cosa) se puede pensar.

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; 
    } 
} 

Respuesta

1

Las pruebas siempre dependen del contexto y los riesgos que usted ve deben guiar la cantidad de pruebas.

  • ¿Qué tan crítico sería si una parte no funciona después de algún cambio?
  • ¿Cree que estas piezas podrían romperse cuando algo cambie?
  • ¿Cuán grande sería la tarea de mantener estas pruebas si la estructura de la página cambiara?
  • ¿Cree que estas piezas cambiarán a menudo? ¿Vale la pena automatizarlos?
  • ¿Cuánto tiempo durará la ejecución de las pruebas cuando la cantidad crezca? ¿Estás listo para esperar ese momento a menudo para ver que los últimos cambios no han roto nada?

Si la página no cambia muy a menudo, esta cantidad parece bastante. También puedes pensar si sería suficiente probar solo una muestra de cosas. Por ejemplo, parece que está incluyendo varias partes en la página. Si provienen de la misma ubicación y están incluidos con el mismo mecanismo, parece poco probable que incluir uno fallará si hay otros allí.

Por otro lado, siempre es más fácil reducir la cantidad. Puede comenzar con esto cuando aprenda y luego ver si necesita cambiar el enfoque más adelante.

1

Mi reacción cuando veo sus pruebas es que en su mayoría verifican los detalles de implementación. Yo recomendaría que te centres en el comportamiento. Pruebe las interacciones del usuario final con el sitio. Verifique que la información esté presente, no cómo se presenta.

+0

Intenté señalar que se trataba de pruebas de integración. De acuerdo de todo corazón: ¡prueba los comportamientos en pruebas unitarias! –

Cuestiones relacionadas