2012-04-17 13 views
7

Merhaba Web sitemi bir araya getiriyorum ve çok basitken, olabildiğince çok yönünü test etmeye karar verdim. Sadece hayal edemediğim durumları hesaba katan faydalı testlerin yazılması (bir betiğin veya css dosyasının yeniden adlandırılması)Basit görünümde çok fazla test var mı?

Steve Sanderson'ın MVC Entegrasyon test çerçevesini kullanıyorum ve testlerim aşağıda.

Sorum şu iki kat, bu "çok fazla" test seviyesi ve eğer değilse, başka hangi senaryoları (geliştirici gibi yeniden adlandırma veya başka bir şey gibi) düşünebilirsiniz.

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

cevap

1

Test her zaman içeriğe bağlıdır ve gördüğünüz riskler test miktarını yönlendirmelidir.

  • Bazı bölümler değişiklikten sonra çalışmıyorsa ne kadar kritik olur?
  • Bir şey değiştiğinde bu parçaların kırılabileceğine inanıyor musunuz?
  • Sayfanın yapısı değişecekse bu testleri sürdürmek ne kadar büyük bir görev olurdu?
  • Bu parçaların sık sık değişeceğine inanıyor musunuz? Onları otomatikleştirmek için para veriyor mu?
  • Miktar büyüdüğünde test ne kadar sürüyor? En son değişikliklerin hiçbir şeyi kırmadığını görmek için sık sık beklemeye hazır mısınız?

Sayfa çok sık değişmiyorsa, bu miktar oldukça fazla görünüyor. Sadece bir şeyleri test etmenin yeterli olup olmayacağını düşünebilirsiniz. Örneğin, sayfaya birden fazla bölüm eklediğiniz anlaşılıyor. Aynı konumdan geliyorlarsa ve aynı mekanizmaya dahil edilmişlerse, diğerleri de dahil olmak üzere birinin dahil edilmesinin mümkün olmaması olası görünmemektedir. Diğer taraftan, miktarı azaltmak her zaman daha kolaydır. Öğrenirken bunu başlatabilir ve daha sonra yaklaşımı değiştirmeniz gerekip gerekmediğini görebilirsiniz.

1

Testlerinizi gördüğüm zamanki reaksiyonum, çoğunlukla uygulama ayrıntılarını doğruladıklarıdır. Davranışa odaklanmasını tavsiye ederim. Son kullanıcının site ile etkileşimlerini test edin. Bilgilerin nasıl sunulduğunu değil, mevcut olduğunu doğrulayın.

+0

Bunların entegrasyon testleri olduğuna işaret etmeye çalıştım. Bütün kalbiyle yeniden katılıyorum: ünite testlerindeki davranışları test etmek! –

İlgili konular