標籤:real ram 菜單 單元 執行 完成 需要 示範 bar
沒有按照預期的那樣做出成功的單元測試,磕磕絆絆參照了下面兩篇部落格大致做出來了,所以很有必要記錄一下過程。
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 Program10 {11 static void Main(string[] args)12 {13 }14 }15 public class test16 {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 testTests12 {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 Program10 {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...
使用VS2013進行C#程式的單元測試(轉)