推行單元測試的目的:
1、 減少BUG提高項目的品質
2、 養成良好的編碼習慣,提高開發人員編碼水平
要測什麼What?
最小的可測試軟體元素(單元), 包括單元的內部結構(如邏輯和資料流)以及單元的功能和可觀測的行為.
由於開發方式的不同,單元測試一般劃分方法如下:
1. 物件導向的軟體開發:以Class(類)作為測試的最小單元。以方法的內部結構作為測試的重點。
2. 結構化的軟體開發:以模組(函數、過程)作為測試的最小單元。
如何測試How?
白盒測試方法:測試單元的內部結構, Nunit Nmock
黑箱測試方法:測試單元的功能和可觀測的行為 《通用測試案例》
步驟:
一、如何設計單元測試
需要弄清楚被測試代碼實現的功能和相應的邏輯關係;
If…else…
Switch..case…
While...
同時還要考慮到測試的輸入內容,以及返回的結果;
用例的設計要保證面面俱到,是否覆蓋了每一條路徑。
而如何做到面面俱到這就需要惡我們對每個函數進行詳細的分析,將分析和討論的結果歸入相關的測試庫中。初期工作的進度慢並不要緊,只要能做得很詳細對於以後的測試還是有很大的協助。或許以後的測試中,只要直接調用原來寫過的測試類別庫,修改部分簡單的語句就可以實現新模組的單元測試了
[TestFixture]表示:類包含了測試代碼(這個特性可以被繼承)。這個類必須是公有的,這個類還必須有一個預設建構函式。
[Test]表示它是一個測試方法。測試方法的傳回值必須為void並且不能帶有參數
[SetUp]屬性:用來標識方法,在開始所有測試之前執行,用來在測試前初始化一些資源,比如初始化類。
[TearDown]屬性:用來標識方法,在所有測試完成之後執行,用來釋放一些資源。
[Ignore]屬性:用來標識方法,指示這個方法由於某些原因暫時不需要測試(比如沒有完成相關代碼)
二、Nunit工具的使用
參考 :Nunit架構在VS2005環境下單步調試
三、Nunit常用類和方法
Assert(斷言):
如果宣告失敗,方法將沒有返回,並且報告一個錯誤。
如果一個方法中包括了多個斷言,在失敗的斷言之後的所有斷言將不會被執行。基於這個原因,最好是為每個測試的斷言使用try語句。
1、法測試二個參數是否相等
Assert.AreEqual( int expected, int actual );
Assert.AreEqual( decimal expected, decimal actual );
。。。。
2、測試二個參數是否引用同一個對象
Assert.AreSame( object expected, object actual );
Assert.AreNotSame( object expected, object actual );
3、測試一個對象是否被一個數組或列表所包含
Assert.Contains( object anObject, IList collection );
比較斷言:
4、測試一個對象是否大於另一個對象
Assert.Greater( int arg1, int arg2 );
5、法測試一個對象是否小於另一個對象
Assert.Less( int arg1, int arg2 );
類型斷言:
Assert.IsInstanceOfType( Type expected, object actual );
條件測試:
Assert.IsTrue( bool condition );
Assert.IsFalse( bool condition);
Assert.IsNull( object anObject );
Assert.IsNotNull( object anObject );
Assert.IsNaN( double aDouble );
Assert.IsEmpty( string aString );
Assert.IsNotEmpty( string aString );
Assert.IsEmpty( ICollection collection );
Assert.IsNotEmpty( ICollection collection );
字串斷言(StringAssert):提供了許多檢驗字串值的有用的方法
StringAssert.Contains( string expected, string actual );
StringAssert.StartsWith( string expected, string actual );
StringAssert.EndsWith( string expected, string actual );
StringAssert.AreEqualIgnoringCase( string expected, string actual );
四、屬性(Attribute):
TestFixtureAttribute (NUnit 2.0)
此特性標記一個類包含有測試方法,以及可選的安裝(setup)和卸載(teardown)方法。