在Visual Studio 2012中,默認使用Microsoft自帶的MS-Test測試框架。但,Visual Studio同樣允許使用第三方測試框架,比如NUnit,xUnit,MbUnit,等等。本篇體驗使用NUnit進行單元測試。
在Visual Studio中創建一個解決方案。
在解決方案下添加一個名稱為"LogAn"的類庫。
創建名稱為LogAnalyzer的類,編寫如下:
namespace LogAn{public class LogAnalyzer{public bool IsValidLogFileName(string fileName){if (!fileName.EndsWith(".SLF")){return false;}return true;}}}
生成"LogAn"的類庫項目。
在解決方案下添加一個"單元測試項目"。
接下來需要安裝"NUnit Test Adapter", "NUnit Test Adapter"是介於NUnit和Visual Studio之間的一個適配器。依次點擊"工具"、"擴展和更新",從中搜索並安裝"NUnit Test Adapter"。
安裝完畢,需要重啟Visual Studio 2012。
在單元測試項目下,通過NuGet安裝NUnit。
在單元測試項目下引用"LogAn"的類庫。
編寫一個測試類和測試方法,單元測試的命名規則有一定的約定,比如說:類名_目的_期望的結果,遵循這個命名規則:
Order_NumberOfOrders_GreaterThanZero_Success
以下是測試類和測試方法:
using LogAn;using NUnit.Framework;namespace MyFirstTestProject{[TestFixture]public class LogAnalyzerTests{[Test]public void IsValidFileName_validFile_ReturnsTrue(){//ArrangeLogAnalyzer analyzer = new LogAnalyzer();//Actbool result = analyzer.IsValidLogFileName("whatever.slf");//AssertAssert.IsTrue(result,"包含正確的後綴名");}}}
生成單元測試項目。
點擊Visual Studio 2012左上角的"測試資源管理器",點擊"運行"。
顯示未通過測試。
修改類庫中的代碼如下:
if (!fileName.ToLower().EndsWith(".slf"))
並重新生成類庫。
再次運行單元測試項目,顯示通過。
在單元測試中,如果一個測試中遺留了一些數據、狀態或對象實例,可能會導致其它測試的失敗。而定位測試之間的依賴性也是很困難的。解決辦法是讓所有測試之間沒有任何依賴關系。NUnit為此提供了[Setup]和[TearDown]這兩個特性,旨在某個測試方法執行之前做一些初始化工作,執行之後做一些清理工作。於是,現在測試代碼可以修改成如下:
using LogAn;using NUnit.Framework;namespace MyFirstTestProject{[TestFixture]public class LogAnalyzerTests{private LogAnalyzer m_anylyzer = null;[SetUp]public void Setup(){m_anylyzer = new LogAnalyzer();}[Test]public void IsValidFileName_validFile_ReturnsTrue(){//Actbool result = m_anylyzer.IsValidLogFileName("whatever.slf");//AssertAssert.IsTrue(result,"包含正確的後綴名");}[Test]public void IsValidFileName_validFileUpperCased_ReturnsTrue(){bool result = m_anylyzer.IsValidLogFileName("whatever.SLF");Assert.IsTrue(result, "包含正確的後綴名");}[TearDown]public void TearDown(){m_anylyzer = null;}}}
參考資料:
.NET單元測試藝術,等等。