使用VS2013進行C#程序的單元測試


沒有按照預期的那樣做出成功的單元測試,磕磕絆絆參照了下面兩篇博客大致做出來了,所以很有必要記錄一下過程。

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...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM