沒有按照預期的那樣做出成功的單元測試,磕磕絆絆參照了下面兩篇博客大致做出來了,所以很有必要記錄一下過程。
http://www.cnblogs.com/duasonir/p/5299732.html(照着這個我成功的做出了單元測試)
http://www.cnblogs.com/Look_Sun/p/4514732.html(這個我幾乎研究了一天,但是最后還是沒有做出來,最后看到上面那位同學的參考的內容和這篇一樣,拜讀之后也作出了半成品)
由於程序都是簡單加法,而且我自己的思想並沒有加入其中,項目名以及有些類名就不做改變了,一些術語不夠精確還望指正。
一、C#控制台程序的單元測試(使用“Unit Test Generator”插件生成單元測試和方法)
“Unit Test Generator”可以通過VS菜單欄:工具->擴展和更新-->搜索““Unit Test Generator””取得,我的已經下載好了,沒有提示下載,安裝完成后后需要重啟VS。
安裝好之后就可以進行單元測試了,這個單元測試主要參照前者的博客成功做出單元測試。
1.打開vs2013:文件->新建->項目(單擊),然后看到如下界面
點擊確定后如下圖:
2.編寫代碼,生成一個新的類,編寫構造函數 與 add()函數。代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace UnitTestDemo 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 } 14 } 15 public class test 16 { 17 public test() 18 { 19 20 } 21 public int add(int a, int b) 22 { 23 return a + b; 24 } 25 } 26 }
3.在代碼空白處右鍵,點擊Unit Test Generator,默認選項確定。
之后界面如下圖所示:
4.在testTest()函數里編寫測試代碼,代碼如下。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using UnitTestDemo; 7 using Microsoft.VisualStudio.TestTools.UnitTesting; 8 namespace UnitTestDemo.Tests 9 { 10 [TestClass()] 11 public class testTests 12 { 13 [TestMethod()] 14 public void testTest() 15 { 16 int a = 1, b = 2, expect = 3; 17 test t = new test(); 18 int real = t.add(a, b); 19 20 Assert.AreEqual(real, expect); 21 //Assert.Fail(); 22 } 23 } 24 }
5.在代碼空白處右鍵,點擊 運行測試(T),運行結果將自動彈出,如下圖所示:
打開測試資源管理器:依次點擊VS2013的菜單欄:測試-> 窗口->測試資源管理器。
如果給出的期望值錯誤的話,測試就不會通過,如下圖:
下面給出一張測試不通過,並且給出實際值與期望值分別是多少的圖片。來源:http://www.cnblogs.com/libaoquan/p/5296384.html
以上為最成功的一次的單元測試,除了測試錯誤的時候沒有提示實際值與期望值。(我盡力了)
二、C#控制台程序的單元測試(手動編寫單元測試類和方法)
主要參照博客:http://www.cnblogs.com/Look_Sun/p/4514732.html
1.同上面的 一.1;
2.在解決方案處右鍵->添加->新建項目。
新增一個單元測試項目。取名為UnitTestDemoTest。如下圖:
3.進入控制台項目UnitTestDemo的Program類,創建一個Add方法(目的就是測試這個Add方法運行是否正常,返回結果是否正確)。這里把Add方法寫到寫到Program類里面了,上面的那個單元測試是生成一個新的類test,編寫構造函數 與 add()函數。
代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace UnitTestDemo 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 } 14 15 public static int Add(int num1, int num2) 16 { 17 return num1 + num2; 18 } 19 } 20 21 }
4.在單元測試項目UnitTestDemoTest中引用控制台項目UnitTestDemo(在“引用”處右鍵“添加引用”),之后界面如下:
引用完畢后項目結構如下:
下面就是VS為UnitTest1類默認生成的方法。可以看到UnitTest1具有一個【TestClass】特性,表明這是一個測試類。TestMethod1具有一個【TestMethod】特性,表明這是一個測試方法。
一個方法必須具有【TestMethod】特性,且其所屬的類具有【TestClass】特性,那么這個方法才會被VS承認為一個【單元測試方法】。
如果沒有上面的兩個特性中的一個,編譯生成是沒有任何問題的。但是VS不會把其作為一個【單元測試方法】。
1 using System; 2 using Microsoft.VisualStudio.TestTools.UnitTesting; 3 4 namespace UnitTestDemoTest 5 { 6 [TestClass] 7 public class UnitTest1 8 { 9 [TestMethod] 10 public void TestMethod1() 11 { 12 } 13 } 14 }
5.截止目前,已經建立了一個可以執行的測試框架,雖然沒有起到什么作用,但是測試已經可以執行了(直接點擊測試資源管理器里面的全部運行即可)。測試結果如下圖:
6.在單元測試的測試方法里面添加測試函數,代碼如下:
1 using System; 2 using Microsoft.VisualStudio.TestTools.UnitTesting; 3 using UnitTestDemo; 4 5 namespace UnitTestDemoTest 6 { 7 [TestClass] 8 public class UnitTest1 9 { 10 [TestMethod] 11 public void TestMethod1() 12 { 13 int num1 = 100; 14 int num2 = 200; 15 16 Assert.AreEqual(Program.Add(num1, num2), 300); 17 } 18 } 19 }
注意:一定要在函數里面引用需要測試的項目,我就是沒有引用才引有錯誤(對於啥都不懂的我就允許我這不專業的說明吧)。這里引用之后,把Program類的可見性改為internal或者public。
只在資源管理器里面引用里面添加引用的話會出現下面的錯誤
7.代碼測試如下圖(測試通過和不通過的界面):
測試不通過時也沒有提示期望值和實際值。o(╯□╰)o
三、其實課上吳小勇同學給我們演示了C++的單元測試。
http://www.cnblogs.com/xiaoyongwu/p/5289964.html
一開始我照着吳小勇同學的博客,准備寫一個C++的單元測試。一直出現錯誤后就寫了C#的單元測試。
主要是手忙腳亂之際,度娘讓我看到希望了,感覺很詳細,就參考着進行單元測試了。
http://www.cnblogs.com/Look_Sun/p/4514732.html
后來一直出錯,請教了班級助教后已經能測試通過了但還是不知道問題出在哪里,迷茫的時候又發現下面這篇博客,最后才順利寫出這個半成品單元測試。
http://www.cnblogs.com/duasonir/p/5299732.html
后期再添加一個C++的單元測試。ing...