日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Visual Studio 2010 单元测试之一---普通单元测试:http://blog.csdn.net/tjvictor/archive/2011/02/09/6175362.aspx...

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Visual Studio 2010 单元测试之一---普通单元测试:http://blog.csdn.net/tjvictor/archive/2011/02/09/6175362.aspx... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文以Visual Studio 2010為例,來介紹如何在Visual Studio里面進行單元測試.

?? ??首先來介紹普通單元測試,這是進行順序測試、壓力測試的基礎。如果在Visual Studio 2010(2008)里面沒有發現下圖中的Test菜單,請用Visual Studio安裝光盤進行安裝,因為Visual Studio單元測試插件安裝時可能不是默認選項。

?

?

測試之前,我們要準備一些測試代碼。或者從下面的鏈接下載完整的項目工程。

http://download.csdn.net/source/3014236

新建一個名為AppSample的Lib。里面有一個MathUtility文件,包含加減乘除四個方法。代碼如下:

namespace?TJVictor.UT.AppSample

{

????public?class?MathUtility

????{

????????public?MathUtility() { }

?

????????public?static?int?Add(int?a,?int?b)

????????{

????????????return?a + b;

????????}

?

????????public?static?int?Minus(int?a,?int?b)

????????{

????????????return?a - b;

????????}

?

????????public?static?int?Divide(int?a,?int?b)

????????{

????????????return?a / b;

????????}

?

????????public?static?int?Multiply(int?a,?int?b)

????????{

????????????return?a * b;

????????}

????}

}

?

創建單元測試項目有兩種方法:

1.直接創建單元測試項目:File->New->Project->Test Project.?如下圖:

?

?

2.?直接在需要創建單元測試的函數上創建:右擊函數名->Create Unit Tests。?如下圖

?

?

?????????這樣就創建好了單元測試項目。Visual Studio?會自動生成一個單元測試工程。推薦使用第二種方法創建,因為第一種方法創建的只有單元測試工程,第二種方法會把單元測試函數也一起創建了出來。

?

本文以第二種創建的方式為例,繼續下一步,講解單元測試文件。

創建好的單元測試工程如下圖:

?

其中MathUtilityTest.cs就是自動生成的單元測試文件,打開可以看到類似如下代碼。

????????[TestMethod()]

????????public?void?AddTest()

????????{

????????????int?a = 0;?// TODO: Initialize to an appropriate value

????????????int?b = 0;?// TODO: Initialize to an appropriate value

????????????int?expected = 0;?// TODO: Initialize to an appropriate value

????????????int?actual;

????????????actual =?MathUtility.Add(a, b);

????????????Assert.AreEqual(expected, actual);

????????????Assert.Inconclusive("Verify the correctness of this test method.");

????????}

?

關于單元測試的各種斷言,不在本文討論范圍之內。下表列出Visual Studio 2010支持的斷言及相關解釋。

斷言

解釋

AreEqual

驗證值相等

AreNotEqual

驗證值不相等

AreSame

驗證引用相等

AreNotSame

驗證引用不相等

Inconclusive

暗示條件還未被驗證

IsTrue

驗證條件為真

IsFalse

驗證條件為假

IsInstanceOfType

驗證實例匹配類型

IsNotInstanceOfType

驗證實例不匹配類型

IsNotNull

驗證條件為NULL

IsNull

驗證條件不為NULL

Fail

驗證失敗

?

測試函數AddTest()的屬性[TestMethod()]表示這個方法是個可運行單元測試方法,區別類中的其他方法(如一些測試輔助方法)。

需要特別注意的是:Assert.Inconclusive("Verify the correctness of this test method.");語句是默認添加的,意思是這個方法是Visual Studio自動創建,運行前自刪除或注釋此句,否則運行結果無法通過。

按上面的步驟,把MathUtility里面的所有方法都建立相應的單元測試,然后按F6進行編譯。編譯后,就可以在單元測試窗口中看到我們剛剛建立的測試方法了。

Test->Windows->Test List Editor如下圖:

?

?

修改DivideTest代碼如下:

????????[TestMethod()]

????????public?void?DivideTest()

????????{

????????????int?a = 100;?// TODO: Initialize to an appropriate value

????????????int?b = 2;?// TODO: Initialize to an appropriate value

????????????int?expected = 50;?// TODO: Initialize to an appropriate value

????????????int?actual;

???????????

????????????actual =?MathUtility.Divide(a, b);

????????????Assert.AreEqual(expected, actual);

????????????//Assert.Inconclusive("Verify the correctness of this test method.");

????????}

在Test List Editor選中DivideTest方法后,右擊如下圖

?

?

1.Run Checked Tests:直接運行此單元測試函數

2.Debug Checked Tests:以Debug模式運行。在此模式下運行單元測試函數,可以在單元測試函數(DivideTest)或是被測函數(MathUtility.Divide)中加斷點,則程序會自動停留在斷點處。

3.Open Test:打開此測試函數的方法,相當于雙擊。

4.Disable:把此測試方法置為無效。

?

?

左擊Run Checked Tests后,運行結果如下圖,證明測試通過:

?

重新修改DivideTest()程序如下:

????????[TestMethod()]

????????public?void?DivideTest()

????????{

????????????int?a = 100;?// TODO: Initialize to an appropriate value

????????????int?b = 2;?// TODO: Initialize to an appropriate value

????????????int?expected = 60;?// TODO: Initialize to an appropriate value

????????????int?actual;

???????????

????????????actual =?MathUtility.Divide(a, b);

????????????Assert.AreEqual(expected, actual);

????????????//Assert.Inconclusive("Verify the correctness of this test method.");

????????}

再次運行,結果如下:

?

測試失敗,原因是:期待值為60,實際值為50,斷言失敗。

?

重新修改DivideTest()程序如下:

????????public?void?DivideTest()

????????{

????????????int?a = 100;?// TODO: Initialize to an appropriate value

????????????int?b = 0;?// TODO: Initialize to an appropriate value

????????????int?expected = 60;?// TODO: Initialize to an appropriate value

????????????int?actual;

???????????

????????????actual =?MathUtility.Divide(a, b);

????????????Assert.AreEqual(expected, actual);

????????????//Assert.Inconclusive("Verify the correctness of this test method.");

????????}

這次以Debug模式運行,則程序會在return?a / b;拋出異常,顯示被除數不能為0.

?

至此,一個簡單的單元測試已經從頭到尾跑了一遍。細心的讀者一定會發現在MathUtilityTest.cs測試文件里面還有四個被注釋掉的方法,下表列出了這四個方法的解釋和用法。

函數名

用法

[ClassInitialize()]

MyClassInitialize

這個方法會在每次調用測試方法前被自動調用。假設在調用AddTest(),DivideTest()等方法之前都需要初始化一些基本數據列表,則這個工作可以放在MyClassInitialize函數里面,不用分別寫在每個測試方法里。

[ClassCleanup()]

MyClassCleanup

這個方法會在每次調用測試方法結束后被自動調用。

[TestInitialize()]

MyTestInitialize

這個方法會在每次啟動一個測試過程前被自動調用。例如本次測試一共選擇了AddTest(),DivideTest()兩個測試方法,則在調用這兩個方法前,MyTestInitialize會先被調用。與MyClassInitialize不同的是,MyClassInitialize是每次調用測試方法時都會被調用,相當于函數級的調用,MyTestInitialize則只在測試過程前會被調用一次,在測試過程結束前,不會再被調用,相當于過程級的調用。

[TestCleanup()]

MyTestCleanup

這個方法會在每次結束一個測試過程后被自動調用。

?

Visual Studio?之所謂把這四個函數注釋掉,原因是這四個函數只是示意性函數(從名字中就可以看出)。關鍵是看這四個函數的方法屬性[ClassInitialize()],[ClassCleanup()], [TestInitialize()], [TestCleanup()]只要把相關的屬性加到相關的方法上,那么這個方法就具有的上面所描述的功能。

?

單元測試適用范圍:

1.驗證函數正確性。對于一個函數,只要我們把相關的測試數據都寫全,然后run一下,就知道是否都能通過。以后修改此方法后,只要再次run一下,就知道此次修改是否影響到了以前的測試用例,大大節省時間和提高正確率。

2.Debug程序。我們一般寫后臺代碼時,都要寫一個console或是winform小程序要調試驗證所寫的類是否能run起來,那么單元測試中的Debug模式就可以勝任此工作。

?

?

下面介紹兩個使用時的小技巧。

1.可以在Test Result窗口里面導出測試結果。導出的結果包括一份測試報告和測試程序。證明此程序已經通過了報告中的所有測試用例,相當于Release了一個版本。

2.設置測試數量。每運行一次測試過程,就會生成一次測試報告和程序。Visual Studio默認次數是25,即超過25后,就會提示超出測試數次。我們可以通過下面的設置來提高次數。

Tool->Options->Test Tools->Test Execution,把里面的25改成100即可。如下圖

?

至此,普通單元測試已經完成。請繼續關注順序單元測試。

?

?

Visual Studio 2010單元測試系列已經全部完成,以方便大家閱讀,請使用http://blog.csdn.net/tjvictor/archive/2011/02/09/6175358.aspx來查看這一系列的所有博文。

轉載于:https://www.cnblogs.com/songtzu/archive/2012/10/22/2733456.html

總結

以上是生活随笔為你收集整理的Visual Studio 2010 单元测试之一---普通单元测试:http://blog.csdn.net/tjvictor/archive/2011/02/09/6175362.aspx...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。