2012-04-17 26 views
7

嗨,我正在把我的網站放在一起,雖然它很簡單,但我決定儘可能多地測試它。使用只寫有用的測試,可以說明情況我可以想象發生的情況(重命名的腳本或CSS文件等)的精神氣質對簡單視圖進行太多測試?

我正在使用史蒂夫桑德森的MVC集成測試框架,我的測試如下。

我的問題是兩方面,這個測試水平是否「太高」,如果不是這樣,您還能想到其他場景(比如重命名或其他任何開發相關的情況)。

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

回答

1

測試始終依賴於上下文,您看到的風險應指導測試的數量。

  • 如果某些零件在發生某些變化後不工作會有多嚴重?
  • 您是否相信這些零件在某些變化時可能會斷裂?
  • 如果頁面結構會發生變化,維護這些測試會有多大的任務?
  • 你相信這些零件會經常改變嗎?它是否實現了自動化?
  • 數量增長時運行測試需要多長時間?你準備好等這段時間經常看到最新的變化沒有破壞任何東西嗎?

如果頁面沒有經常變化,這個數量看起來相當多。你也可以認爲只要測試一些東西就足夠了。例如,您似乎在頁面中包含多個部分。如果他們來自同一地點並且被包含在同一個機制中,那麼包括其中一個人在內的其他人似乎也不會失敗。

另一方面,減少金額總是更容易。你可以從學習開始,然後看看你是否需要稍後改變方法。

1

當我看到您的測試時,我的反應是他們主要驗證實現細節。我會建議你專注於行爲。測試最終用戶與網站的互動。驗證信息是否存在,而不是如何呈現。

+0

我確實試圖指出這些是集成測試。全心全意地認同:在單元測試中測試行爲! – 2012-04-17 10:11:25

相關問題