1.打開VS2013 --> 新建一個項目。這里我們默認創建一個控制台項目。取名為UnitTestDemo
2.在解決方案里面新增一個單元測試項目。取名為UnitTestDemoTest
創建完畢后項目結構大概如下:
3.進入控制台項目UnitTestDemo的Program類,創建一個Add方法。
namespace UnitTestDemo { class Program { static void Main(string[] args) { } public static int Add(int num1, int num2) { return num1 + num2; } } }
4.我們的目的就是測試上面的Add方法運行是否正常,返回結果是否正確。
5.在單元測試項目中引用控制台項目,引用完畢后項目結構如下:
6.單元測試項目里面UnitTest1這個類的名字取得太難看了,我們把名字改為ProgramTest,表明這是在測試Program類。改完如下:
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace UnitTestDemoTest { [TestClass] public class ProgramTest { [TestMethod] public void TestMethod1() { } } }
7.上面就是VS為ProgramTest類默認生成的方法。可以看到ProgramTest具有一個【TestClass】特性,表明這是一個測試類。TestMethod1具有一個【TestMethod】特性,表明這是一個測試方法。
8.可以這樣理解,一個方法必須具有【TestMethod】特性,且其所屬的類具有【TestClass】特性,那么這個方法才會被VS承認為一個【單元測試方法】。
如果沒有上面的兩個特性中的一個,編譯生成是沒有任何問題的。但是VS不會把其作為一個【單元測試方法】。
9.“VS不把一個方法作為【單元測試方法】”是什么意思呢?
依次點擊VS的菜單欄【測試】--> 【窗口】-->【測試資源管理器】,可以打開測試資源管理器。
10.測試資源管理器里面會顯示當前解決方案里面的所有單元測試。說明白點就是這里只顯示符合【第8點】要求的方法。
你可能會說,為什么上面的圖里面什么都沒顯示,【TestMethod】特性和TestClass】特性現在不是都有嗎?
原因是你還沒有生成程序集。OK,按F6.就可以看到【測試資源管理器】中顯示了【TestMethod1】:
11.我們要清楚我們創建單元測試的初衷:是用工具幫助我們測試軟件的質量、穩定性、性能等等。【VS】在這里就充當了工具的作用。
12.回到命名的問題,很明顯TestMethod這個名字太難看了,我們把它改成AddTest表示這是在測試Add方法。
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace UnitTestDemoTest { [TestClass] public class ProgramTest { [TestMethod] public void AddTest() { } } }
13.截止目前,我們已經建立了一個可以執行的測試框架,雖然沒有起到什么作用,但是測試已經可以執行了。
執行測試的方法之一是:右鍵點擊需要測試的【單元測試】方法的名稱,選擇運行:
運行測試之后,可以在測試資源管理器中查看測試的結果:
執行單元測試的方法有很多,這些需要我們在不斷的學習中去體會。
14.接下來我們做一點有意義的事情。改進AddTest方法:
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace UnitTestDemoTest { [TestClass] public class ProgramTest { [TestMethod] public void AddTest() { int num1 = 100; int num2 = 200; Assert.AreEqual(Program.Add(num1, num2), 300); } } }
在這之前,請把Program類的可見性改為internal或者Public。
15.“Assert”之前沒接觸過單元測試的朋友,或者英語差點的可能不認識。上谷歌翻譯:
清楚的看到,“Assert”的意思是“斷言”。所以“Assert.AreEqual(Program.Add(num1, num2), 300);”這句話的意思就是:我斷言“Program.Add(num1, num2)”的結果就是300。
而斷言的正確與否只需要通過測試工具測試即可。如果測試通過說明此斷言是正確的,反之就說明這個測試失敗了。
斷言有很多種,包括上面普通的Assert,還有字符串斷言,集合斷言等等。
注意Assert.AreEqual(expected, actual)這一行代碼,Assert.AreEqua是測試expected和actual是不是相等,相等就認為成功,不相等就認為失敗。同樣用來判定的方法共有以下幾個:
Assert.AreEqual() 測試指定的值是否相等,如果相等,則測試通過;
Assert.Inconclusive() 表示一個未驗證的測試;
Assert.IsTrue() 測試指定的條件是否為True,如果為True,則測試通過;
Assert.IsFalse() 測試指定的條件是否為False,如果為False,則測試通過;
Assert.IsNull() 測試指定的對象是否為空引用,如果為空,則測試通過;
Assert.IsNotNull() 測試指定的對象是否為非空,如果不為空,則測試通過;
16.ok,運行測試可以看到測試通過。
17.如果上面所說的你都明白,那么到這里為止,你可以自己編寫簡單的單元測試代碼並執行測試了。
最后還有一個要說的就是,如果你覺得手動編寫單元測試類和方法太麻煩,那么可以使用“Unit Test Generator”插件幫助你生成單元測試和方法。
這樣你可以把重心偏到編寫測試邏輯上。
“Unit Test Generator”可以通過VS菜單欄【工具】-->【擴展和更新】-->搜索““Unit Test Generator””取得。
18.安裝“Unit Test Generator”需要重啟VS。
在需要進行單元測試的類和方法上點擊右鍵,如圖操作(圖中演示的是生成單元測試方法)
點擊之后會彈出一個對話框,需要你配置一個名稱的規則,配置好后點擊ok即可生成測試方法。
19.最后希望大家養成隨時測試代碼的好習慣。