修複代碼中的bug所要付出的代碼很昂貴。開發過程中發現錯誤的時間越早,修複成本就越低。
單元測試是在開發早期發現BUG的好方法。一些開發人員甚至遵循這樣的原則:程式員應該在編寫代碼之前建立單元測試,這成為測試驅動開發(Text-Driven Development,TDD)。
微軟提供了專用的單元測試架構,名為MSTest;但是,這裡将使用第三方單元測試架構xUnit.net。
執行如下步驟:
(1)在Chapter04檔案夾中建立2個名為CalculatorLib和CalculatorLibUnitTests的子檔案夾,并将它們分别添加到工作區。(我因為操作失誤,從新建立了Calculator檔案夾)其他步驟一樣,添加建立2個子檔案夾,然後右鍵添加到工作區。
(2)導航到Terminal|new Terminal并選擇CalculatorLib。
(3)在終端視窗中輸入以下指令:
dotnet new classlib
(4)将名為Class1.cs的檔案重命名為Calculator.cs。
(5)修改Calculator.cs檔案以定義為Calculator類(帶有故意的錯誤吧加法寫成乘法),如果你覺得代碼比較亂Visual Studio Code下使用Ctrl+A全選,然後使用Ctrl+K和Ctrl+F組合鍵自動格式化代碼布局,如下所示:
(6)在終端視窗中輸入以下指令:
dotnet build
(7)導航到Terminal|New Terminal并選擇CalculatorLibUnitTests。
(8)在終端視窗中輸入以下指令:
dotnet new xunit
(9)單擊名為CalculatorLibUnitTests.csproj的檔案,修改配置以添加ItemGroup部分,其他包含對CalculatorLib項目的引用,如下所示:
(10)将檔案UnitTest1.cs重命名為CalculatorUnitTests.cs
(11)在終端視窗中輸入以下指令:
好的單元測試包含如下三個部分。
Arrange:這部分為輸入輸出聲明和執行個體化變量。
Act:這部分執行想要測試的單元。在我們的例子中,這意味着調用要測試的方法。
Assert:這部分對輸出進行斷言。斷言是一種信念,如果不為真,則表示測試失敗。例如,當計算2+2時,期望結果是4。
現在我們為Calculator類編寫單元測試。
(1)打開CalculatorUnitTests.cs,将類重命名為CalculatorUnitTests,導入CalculatorLib名稱空間,然後修改CalculatorUnitTests類,使其擁有兩個測試方法,分别計算2加2以及2加3,如下所示:
(1)在CalculatorLibUnitTest項目的終端視窗中輸入以下指令:
dotnet test
(2)請注意,輸出結果表面運作了2個測試:一個測試通過,另一個測試失敗。
(3)糾正A的的方法中的乘法為加法。
(4)再次運作單元測試,你會發現BUG修複,測試通過了。