[轉]VS2010中的單元測試

本文轉自:http://zxianf.blog.163.com/blog/static/30120701201101011757499/

?

在VS2010中,單元測試的功能很強大,使得建立單元測試和編寫單元測試代碼,以及管理和運行單元測試都變得簡單起來,通過私有訪問器可以對私有方法也能進行單元測試,并且支持數據驅動的單元測試。

1、建立單元測試項目

1.1、從被測試代碼生成單元測試

1)實例:創建VC#模式下的控制臺應用程序,工程名為CUnitTest

2)輸入簡單的加、減、乘、除函數代碼,如下圖所示

3)可按如下步驟建立單元測試

????(1)在Add方法體內,單擊鼠標右鍵,在菜單中選擇"創建單元測試",

(2)在出現的"創建單元測試"界面中,Add方法被自動勾上,表示要為這個方法創建單元測試代碼的基本框架,單擊確定按鈕

(3)點擊確定后,在新建測試項目中,輸入需要創建的單元測試的新項目的名稱,然后單擊"創建"按鈕,則自動創建一個新的單元測試代碼項目。

(4)在"解決檔案資源管理器"中可以看到多了一個"AddTest"項目,可以看出"AddTest"項目引用了被測項目的程序集,和單元測試框架Microsoft.VisualStudio.QualityTools.UnitTestFrame,并且自動產生兩個C#代碼文件AssemblyInfo.cs和ProgramTest.cs

(5)ProgramTest.cs的代碼如下圖所示,從圖中可以看到,自動產生了一個"ProgramTest"類,并使用[TestClass()]標識為一個單元測試類,以及一個"AddTest"測試方法,。并用[TestMethod()]標識。

(6)ProgramTest.cs代碼文件詳講

[TestMethod()]:說明了以下代碼是一個測試用例

Int a = o; // TODO: 初始化為適當的值

int b = 0; // TODO: 初始化為適當的值

這兩句是被測函數的輸入參數,需要我們去修改它的值,也就是我們輸入測試用例的地方。

double expected = 0; // TODO: 初始化為適當的值

double actual;

??????這兩句話淺顯易懂,前一句話是定義了期望值和對它進行初始化,后一句話是定義了實際值。默認

Assert.AreEqual(expected, actual);

Assert在這里可以理解成斷言:在VSTS里做單元測試是基于斷言的測試。

默認代碼中Assert.Inconclusive 表明這是一個未經驗證的單元測試。在實際的程序中可以注釋掉。

1.2、添加單元測試項目

(1)另外一種單元測試方法是獨立添加單元測試項目,在解決方案中添加一個新的項目,選擇項目類型為"測試項目",

(2)單擊確定后,自動產生一個新的單元測試項目,在"解決方案資源管理器"中可看到新添加的測試項目"TestProject2"。對比"TestProject2"和"AddTest"可發現,"TestProject2"少了對被測試項目程序集的引用,僅僅引用了單元測試框架的DLL"Microsoft.VisualStudio.QualityTools.UnitTestFrame"

?

2、編寫測試方法

單元測試的基本方法是調用被測代碼的函數,輸入函數的參數值,獲取返回結果,然后與預期測試結果進行比較,如果相等則認為測試通過,否則認為測試不通過。

1、Assert類的使用

Assert.Inconclusive()??? 表示一個未驗證的測試;

Assert.AreEqual()?????????測試指定的值是否相等,如果相等,則測試通過;

AreSame()????????????用于驗證指定的兩個對象變量是指向相同的對象,否則認為是錯誤

AreNotSame()????????用于驗證指定的兩個對象變量是指向不同的對象,否則認為是錯誤

Assert.IsTrue()????????????? 測試指定的條件是否為True,如果為True,則測試通過;

Assert.IsFalse()???????????? 測試指定的條件是否為False,如果為False,則測試通過;

Assert.IsNull()?????????????? 測試指定的對象是否為空引用,如果為空,則測試通過;

Assert.IsNotNull()????????? 測試指定的對象是否為非空,如果不為空,則測試通過;

2、CollectionAssert類的使用

用于驗證對象集合是否滿足條件

StringAssert類的使用

用于比較字符串。

StringAssert.Contains

StringAssert.Matches

StringAssert.tartWith

?

3、數據驅動的單元測試

數據驅動的單元測試是指單元測試的輸入數據遍歷一個數據源的所有行。從數據源的沒一行讀入數據并傳入給測試方法使用

3.1、ACCESS數據驅動單元測試

1)打開測試視圖窗口,選擇測試視圖

2)在測試視圖窗口中選擇需要配置成數據驅動方式的單元測試方法,然后按F4,打開單元測試的屬性窗口

3)編輯"數據連接字符串"屬性,在"屬性"窗口中單擊該屬性,然后單擊省略號 (…)。這將打開"選擇數據源"對話框,其中列出了若干個可能的數據源,包括 ODBC、Microsoft SQL Server 和 Microsoft Access。選擇一個數據源后將打開一個特定于該數據源類型的對話框;可以使用此對話框配置該數據源的連接屬性。配置完數據連接后,連接字符串會作為"數據連接字符串"的值出現。此字符串還會作為單元測試方法的一個屬性存儲起來

4)在這個界面中,選擇一個Acess表data.mdb,單擊"確定"按鈕完成設置,回到"單元測試屬性"窗口。可以看到數據源的已經設置好。

5)在建立與數據源的連接之后,可以選擇一個數據表。當您單擊"屬性"窗口的值列中的下拉列表時,將會列出所連接的數據庫中的表。從此列表中選擇的表就是在運行單元測試時將檢索其中的行的表。與"數據連接字符串"等其他屬性一樣,"數據表名稱"也會作為單元測試方法的一個屬性存儲起來。

6)在"數據訪問方法",請選擇"順序"或"隨機";默認值為"順序"。此設置表示從數據源的表中檢索記錄的順序。

????可以看到,在測試方法前面已經添加了一行:

7)數據源的使用

通過 TestContext 類的 DataRow 和 DataConnection 屬性將數據提供給正在運行的單元測試。下面為使用TestContext 類的 DataRow屬性來讀入數據行

8)Acess數據源中的表為

3.2、讀取Excel的方法:

1)在桌面新建一個txt文件,更改文件名為data.dsn

2)選中"數據庫連接字符串",單擊右邊列的按鈕,更改數據源為Microsoft ODBC數據源,點擊"確定"按鈕

3)選擇使用連接字符串,點擊生成

4)選擇Excel數據源的驅動程序,點擊"下一步"

5)選擇data.dsn為數據源保存文件,一直選擇"下一步"。

6)在彈出的選擇工作簿中,選擇用例的輸入文件data.txt,點擊"確定"

7)選擇用例所在的Sheet頁,選擇"完成"

8)數據源的使用代碼

4、單元測試的運行

單元測試的運行有兩種方式:調試和運行。可以像調試普通代碼一樣對單元測試代碼進行調試,當然也可以直接運行,單元測試的結果將在"測試結果"界面中展示,雙擊測試結果,可以得到測試結果的詳細信息。單元測試的代碼覆蓋率可以在"代碼覆蓋率結果"界面中展示。

5、附加測試屬性

"附加測試屬性"。默認都是被注釋掉的,只要我們取消注釋就可以使用了。這個功能的加入,很大程度上是為了增加測試的靈活性。具體的屬性有:

[ClassInitialize()]在運行類的第一個測試前先運行代碼

[ClassCleanup()]在運行完類中的所有測試后再運行代碼

[TestInitialize()]在運行每個測試前先運行代碼

[TestCleanup()]在運行完每個測試后運行代碼

如在執行測試時,將測試執行時間輸入到日志中,代碼如下

?

轉載于:https://www.cnblogs.com/freeliver54/archive/2011/07/07/2099752.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275394.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275394.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275394.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IDEA、 JetBrains、webstorm、 pycharm 破解教程

[TOC] 第一步 下載IDEA 2018年2月前版本 ) !!!注意 一定要2018年2月前的版本 最新版本不確定能否使用 第二步 打開破解包網址 下圖所示 點擊下載 點擊下載第三步 把下載好的jar包放到IDEA安裝目錄的/bin里面 第四步 打開上圖的圈中的文件 在兩…

微型計算機儲存信息的基本單位是什么,16.磁盤存儲器存、取信息的最基本單位是...

【填空題】學習完成4.6的教學視頻以后,完成齒輪建模并測量其質量為( )kg。【判斷題】在單鏈表中設置頭結點的作用是為了操作上的方便【判斷題】財務杠桿會增加ROE和EPS的波動程度【多選題】形式美的構成因素一般劃分為兩大部分:一部分是構成形式美的();一部分是構成形式美的(),…

三年經驗前端社招——Shopee

大家好,我是若川。最近組織了源碼共讀活動《1個月,200人,一起讀了4周源碼》,已經有超50人提交了筆記,群里已經有超1200人,感興趣的可以點此鏈接掃碼加我微信 ruochuan12本文經作者lxcan 授權轉載&#xff0…

簡易撥號器iCall

iCall是由哥開發的一款android平臺的電話撥號小工具&#xff0c;簡單不能再簡單的Android手機撥號程序。 代碼不過幾行&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/…

蘋果手機隱私分析數據是什么_蘋果公司以用戶為中心的隱私保護方法能教給我們什么?

蘋果手機隱私分析數據是什么重點 (Top highlight)Moving beyond the rollercoaster of excitement and controversy Apple has been in for the last week, there was one thing in the WWDC keynote that stood out for me. One thing I really appreciated seeing. There is …

中外計算機百科知識,計算機百科知識.doc

計算機百科知識計算機百科知識1.微機熱啟動時,需要按下的組合鍵是( D )A、CtrlDel B、AltDel C、CtrlAlt D、CtrlAltDel2.顯示器和打印機都是&#xff1a;( D )A、顯示設備B、輸入設備C、存儲設備D、輸出設備3.HOME鍵的作用是( B ) A、將光標移到當前行的右端 B、將光標移到當前…

為什么 Vue2 this 能夠直接獲取到 data 和 methods ? 源碼揭秘!

1. 前言大家好&#xff0c;我是若川。最近組織了源碼共讀活動《1個月&#xff0c;200人&#xff0c;一起讀了4周源碼》&#xff0c;已經有超50人提交了筆記&#xff0c;群里已經有超1200人&#xff0c;感興趣的可以點此鏈接掃碼加我微信 ruochuan12之前寫的《學習源碼整體架構系…

java包的命名規則技巧

java包的概念和.net名稱空間非常類似。.net的名稱空間通常以程序的項目名稱和功能模塊或層次結構命名。 java包也是如此。唯一不同的是java程序最外層包的名稱通常以com開始。起初我不知道為什么這么命名。后來發現&#xff0c;原來java包命名其實就是網站域名去掉www的倒寫然后…

鈕扣電池電壓電量_紐扣廠

鈕扣電池電壓電量S. is a designer and works at the button factory. Despite its scary look, S. goes there every day, and he loves his routine, never missing a day!S.是一位設計師&#xff0c;在按鈕工廠工作。 盡管看上去很恐怖&#xff0c;S。每天都去那里&#xff…

18秋學期《計算機網絡》在線作業,18秋北交《計算機應用基礎及計算機網絡與應用》在線作業一-2輔導資料.docx...

18秋北交《計算機應用基礎及計算機網絡與應用》在線作業一-2輔導資料.docx18 秋北交計算機應用基礎及計算機網絡與應用在線作業一-21、B 2、D 3、B 4、A 5、B 一、單選題共 10 題&#xff0c;40 分1、決定局域網特性的主要技術 要素包括( )、傳輸介質與介 質訪問控制方法。A 所…

三年經驗前端社招——慧擇網

大家好&#xff0c;我是若川。最近組織了源碼共讀活動《1個月&#xff0c;200人&#xff0c;一起讀了4周源碼》&#xff0c;已經有超50人提交了筆記&#xff0c;群里已經有超1200人&#xff0c;感興趣的可以點此鏈接掃碼加我微信 ruochuan12本文經作者lxcan 授權轉載&#xff0…

什么是云計算?云計算學習基礎

云計算&#xff08;cloudcomputing&#xff09;是基于互聯網的相關服務的增加、使用和交付模式&#xff0c;通常涉及通過互聯網來提供動態易擴展且經常是虛擬化的資源。 美國國家標準與技術研究院&#xff08;NIST&#xff09;定義&#xff1a;云計算是一種按使用量付費的模式&…

港口遭遇小MM

港口&#xff0c;遭遇小MM 剛開始&#xff0c;丫頭看見我拍她&#xff0c;對我毫不客氣地說&#xff1a;“侵犯肖像權&#xff0c;除非立刻買兩份冰淇淋來&#xff01;”后來&#xff0c;她就一直跟在我屁股后面&#xff0c;求我給她拍。輪到我說話了&#xff1a;“拍一張&…

印發 指南 通知_通知設計的綜合指南

印發 指南 通知重點 (Top highlight)Peripheral messages in digital products, collectively known as notifications, should never harm the user experience. Instead, they must contribute to an experience that helps people accomplish a goal. Addressing notificati…

電大免考英語計算機,關于電大本科課程中英語免修免考的條件

關于免考的規定&#xff1a;(一) 已具有國民教育系列本科以上學歷(含本科)&#xff0c;可免考全部統考科目&#xff1b;(二) 除計算機類專業學生外&#xff0c;獲得全國計算機等級考試一級B或以上級別證書者可免考“計算機應用基礎”&#xff1b;(三) 除英語專業學生外&#xf…

三年經驗前端社招——眾安保險

大家好&#xff0c;我是若川。最近組織了源碼共讀活動《1個月&#xff0c;200人&#xff0c;一起讀了4周源碼》&#xff0c;已經有超50人提交了筆記&#xff0c;群里已經有超1200人&#xff0c;感興趣的可以點此鏈接掃碼加我微信 ruochuan12本文經作者lxcan 授權轉載&#xff0…

當文字成為雨滴:HTML、CSS、JS創作炫酷的“文字雨“動畫!

簡介 在本篇技術文章中&#xff0c;將介紹如何使用HTML、CSS和JavaScript創建一個獨特而引人注目的"文字(字母&數字)"雨&#x1f327;?動畫效果。通過該動畫&#xff0c;展現出的是一系列隨機字符將從云朵中下落像是將文字變成雨滴從天而降&#xff0c;營造出與…

《夢斷代碼》閱讀筆記01

這幾天閱讀了老師推薦的《夢斷代碼》前幾章&#xff0c;通過本書簡介可以知道本書大概主要講的是做軟件過程中的困難。 第一章軟件時間&#xff0c;主要講的是從事軟件制作行業的艱辛&#xff0c;需要沒日沒夜的加班工作&#xff0c;書中有這樣一句話讓我記憶深刻&#xff1a;“…

關于html:form/html:form特性

<html:form>第一遍執行的時候他就會根據action屬性中指定的Action到struts-config.xml文件中找到該Action&#xff0c;并把該Action綁定ActionForm實例化&#xff0c;如果<html:form>的子標簽中(也就是文本框等一些元素)有值&#xff0c;則把這些值填充到對應的Act…

現代人的壓力和焦慮_設計師如何建立減少焦慮和壓力的體驗

現代人的壓力和焦慮From my Brooklyn apartment in New York City, I watch Gov. Andrew Cuomo share the daily Covid-19 death toll with the nation. I watch his broadcast every day, around 11 a.m. I dubbed Cuomo America’s #crisisdaddy and have posted so many Ins…