單元測試是對軟件中的最小可測試單元進行檢查和驗證。對於單元測試,要保證測試粒度足夠小,才能準肯定位問題。一般而言,一個單元測試是用於判斷某個特定條件(或者場景)下某個特定函數的行爲。執行單元測試,是爲了證實某段代碼的行爲確實和開發者所指望的一致。咱們在編寫測試代碼時,應該要保證代碼的自動執行,並不是交互式的,保證測試用例的自動執行,不須要對測試結果進行人工驗證。github
單元測試除了協助本地開發,一般還放在持續集成中。每次有代碼簽入,單元測試都會被執行。所以單元測試要保證可重複執行,不能受外界環境影響。咱們在編碼設計時,可將外部依賴項經過DI容器注入。好比,咱們有一個接口,依賴日誌中間件,數據庫等,咱們就能夠經過DI注入一個內存數據庫和Mock對象來實現。數據庫
編寫一段代碼,實現一個功能:判斷一個字符串是否時長文本(約定長度大於6即爲長文本)框架
public class UnitTestSample { public static bool IsStringLong(string val) { return val.Length > 6; } }
咱們如今編寫一個單元測試,測試長文本
本測試用例使用xUnit函數
Install-Package xunit -Version 2.4.1單元測試
測試方法名建議:待測試方法名+預期結果+參數測試
using Xunit; public class UnitTestSampleTest { [Fact] public void IsStringLong_ReturnTrue_WithExpectedParameters() { // Arrange string val = "1234567"; // Act var actual = UnitTestSample.IsStringLong(val); // Assert Assert.True(actual); } }
若是你使用的Visual Studio
進行開發,你能夠選擇開啓Live Unit Testing
當你編寫完測試代碼後,Visual Studio會自動運行測試,以下(經過測試的代碼會有一個勾):
編碼
固然,你也能夠打開測試資源管理器運行測試
設計
上面咱們只對正常狀況下進行了測試,若是咱們傳入null值呢?對於null值,其實咱們是指望返回false,咱們編寫如下測試代碼日誌
[Fact] public void IsStringLong_ReturnTrue_WithNullParameters() { // Arrange string val = null; // Act var actual = UnitTestSample.IsStringLong(val); // Assert Assert.False(actual); }
咱們發現測試未經過:
查看測試結果發現產生了一個System.NullReferenceException
異常
咱們看前面編寫的功能代碼,發現return val.Length > 6
並無對null值進行處理,如今修改此代碼:
public static bool IsStringLong(string val) { return val?.Length > 6; }
測試經過