4、重構1的單元測試ide
程序開發過程當中,寫代碼是爲了實現需求。當咱們的代碼經過了編譯,只是說明它的語法正確,功能可否實現則不能保證。 所以,當咱們的某些功能代碼完成後,爲了檢驗其是否知足程序的需求。能夠經過編寫測試代碼,模擬程序運行的過程,檢驗功能代碼是否符合預期。單元測試
單元測試就是開發者編寫一小段代碼,檢驗目標代碼的功能是否符合預期。一般狀況下,單元測試主要面向一些功能單一的模塊進行。測試
舉個例子:一部手機有許多零部件組成,在正式組裝一部手機前,手機內部的各個零部件,CPU、內存、存儲、電池、攝像頭、按鍵等,都要進行測試,這就是單元測試。對象
單元測試實際上就是一些「斷言」(assert)代碼。斷言就是判斷一個方法或對象的一個方法所產生的結果是否符合你指望的那個結果。單元測試中,通常使用assert來判斷結果,若是表達式爲真則經過,若是表達式爲假會發生異常。blog
在 代碼重構與單元測試——「提取方法」重構(三) 的文章中咱們已經進行了「提取方法」重構,今天咱們要寫一個測試用例,而後執行一下單元測試,來看看咱們以前的「提取方法」重構是否正確,重構以後是否產生了新的bug。內存
接下來咱們針對兩個新的方法建立兩個測試方法,進行單元測試,把對結果檢查的工做交給單元測試中的斷言來作。ci
1. 咱們在測試項目LeasePowerBankTest中找到UnitTest1.cs測試類文件,而後在此文件的頂部添加 以下代碼語句,供測試項目調用。代碼以下:資源
using LeasePowerBank;
對測試類的最低要求有:開發
1)任何包含要在「測試資源管理器」中運行的單元測試方法的類都須要有 [TestClass] 特性。it
2)須要「測試資源管理器」識別的每一個測試方法都必須具備 [TestMethod] 屬性。
3)單元測試項目中能夠具備不含 [TestClass] 特性的其餘類,測試類中能夠具備不含 [TestMethod] 特性的其餘方法。 能夠從測試方法中調用這些其餘的類和方法。
在此過程當中,編寫單元測試方法以驗證 Customer類的 GetAmount方法的行爲。
咱們的單元測試,至少須要檢查兩種行爲:
若是計費金額小於應有金額,該方法會引起 ArgumentOutOfRangeException。
若是計費金額等於應有金額,則斷言成功。
測試方法必須知足如下要求:
1)使用 [TestMethod] 特性進行修飾。
2)它將返回 void 。
3) 它不能含有參數。
2. 對GetAmount的單元測試方法代碼以下:
[TestMethod] public void ValidGetAmountTest() { double expected = 5; //建立用戶 var customer = new Customer("張三"); //建立充電寶 PowerBank regularPowerBank = new PowerBank("低-充電寶", PowerBank.LowTraffic); //建立租賃數據 var rental1 = new Rental(regularPowerBank, 5); // Act decimal actual = customer.GetAmount(rental1); // Assert Assert.AreEqual(expected,actual,0.001, "總金額計算錯誤"); }
3. 對ValidGetFrequentRenterPointsTest的單元測試方法代碼以下:
[TestMethod] public void ValidGetFrequentRenterPointsTest() { int expected = 5; //建立用戶 var customer = new Customer("張三"); //建立充電寶 PowerBank regularPowerBank = new PowerBank("低-充電寶", PowerBank.LowTraffic); //建立租賃數據 var rental1 = new Rental(regularPowerBank, 5); // Act int actual = customer.GetFrequentRenterPoints(0,rental1,5); // Assert Assert.AreEqual(expected, actual, 0.001, "積分計算錯誤"); }
4. 在Visual Studio 2019的菜單欄上找到 「生成」 菜單,選擇 「生成解決方案」 。以下圖。
5. 在Visual Studio 2019的菜單欄上找到「測試-->運行全部測試」菜單項。或者在「測試資源管理器中」選擇 「在視圖中運行全部測試」按鈕, 以運行測試。以下圖。
6.測試運行時,「測試資源管理器」窗口頂部的狀態欄呈動態 。 測試運行結束時,若是測試方法所有經過,狀態欄將變爲綠色。以下圖。
7. 咱們將ValidGetAmountTest方法修改以下。
[TestMethod] public void ValidGetAmountTest() { double expected = 6; //建立用戶 var customer = new Customer("張三"); //建立充電寶 PowerBank regularPowerBank = new PowerBank("低-充電寶", PowerBank.LowTraffic); //建立租賃數據 var rental1 = new Rental(regularPowerBank, 5); // Act double actual = (double)customer.GetAmount(rental1); // Assert Assert.AreEqual(expected,actual,0.001, $"總金額計算錯誤,實際計算金額{actual},指望金額:{expected}"); }
8.在這種狀況下,咱們再次經過「測試-->運行全部測試」運行測試,結果有一個測試失敗。以下圖。在「測試資源管理器」 中選擇該方法,可在「測試詳細信息摘要」窗口查看詳細信息。