




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、VS2012 C+單元測試和代碼覆蓋率1 VS2012下C+代碼簡單單元測試在網(wǎng)上關(guān)于VS2008 VS2010 VS2012的單元測試幾乎都是關(guān)于C#的單元測試,我測試了一下,C#的單元測試確實好用,然而關(guān)于C+的單元測試很少,在這里我來簡單的介紹一下步驟。普通的工程關(guān)鍵步驟是要包含頭文件和obj文件;如果是要測試靜態(tài)庫或者動態(tài)庫,關(guān)鍵步驟是要包含頭文件和lib文件。1.1 在VS2012中建立要測試的簡單的工程在這里要測試的代碼建立如下:新建一個“Win32控制臺應(yīng)用程序”,默認(rèn)它的名稱“ConsoleApplication1”,圖表 11新建“Win32控制臺應(yīng)用程序”圖表 12進(jìn)入向?qū)?/p>
2、圖表 13進(jìn)入向?qū)?在“進(jìn)入向?qū)?”中選擇 “空項目”。然后按“完成”。然后添加頭文件和源代碼文件,文件目錄如下:圖表 14簡單代碼目錄結(jié)構(gòu)下面是具體的代碼:/AddFunc.h#ifndef _ADD_FUNC_H_#define _ADD_FUNC_H_int AddFunc(int a, int b);#endif /AddFunc.cpp#includeAddFunc.hint AddFunc(int a, int b)return a + b; /MultiFunc.h#ifndef _MULTI_FUNC_H_#define _MULTI_FUNC_H_int MultiFunc(
3、int a, int b);#endif /MultiFunc.cpp#includeMultiFunc.hint MultiFunc(int a, int b)return a * b; /SubFunc.h#ifndef _SUB_FUNC_H_#define _SUB_FUNC_H_int SubFunc(int a, int b);#endif /SubFunc.cpp#includeSubFunc.hint SubFunc(int a, int b)return a - b; /main.cpp#include AddFunc.h#include SubFunc.h#include
4、MultiFunc.hint main(int argc, char* argv)return 0;編譯鏈接此工程,生成一系列的obj文件。在這里我要對上面的函數(shù)進(jìn)行單元測試。1.2 建立測試工程選中“解決方案”ConsoleApplication1 (1個項目)”后右鍵點擊,選中“添加”-“新建項目”,如 “圖表 1 5新建測試工程”所示。圖表 15新建測試工程選擇“測試”-“托管測試項目”,輸入名稱“UnitTest_First”,按“確定”圖表 16新建UnitTest1測試工程建立測試工程后的目錄結(jié)構(gòu)如“圖表 1 7建立測試工程后的目錄結(jié)構(gòu)”所示圖表 17建立測試工程后的目錄結(jié)構(gòu)選中測
5、試工程中的“UnitTest.cpp”源文件,打開看一下代碼如圖“”所示。圖表 18 源文件UnitTest.cpp 的代碼主要用的測試模塊在using namespace Microsoft:VisualStudio:TestTools:UnitTesting;中。1.3 編寫測試工程中的測試代碼先編寫一個對于加法的簡單測試代碼,在“void TestMethod1()”下添加如下測試代碼:int na = 1, nb = 3, nExpect = 4;int nReal = AddFunc(na, nb);Assert:AreEqual(nReal, nExpect);當(dāng)然得把加法的頭文件
6、包含過來。#include./ConsoleApplication1/AddFunc.h添加頭文件和代碼后的代碼如圖“圖表 1 9添加頭文件后的代碼”和“圖表 1 10添加測試加法源代碼后的代碼”所示。圖表 19添加頭文件后的代碼圖表 110添加測試加法源代碼后的代碼還得把加法的obj文件包含進(jìn)來。添加方法如圖“圖表 1 10添加被測試工程的obj”所示。圖表 111添加被測試工程的obj描述:選中測試工程“UnitTest_First”右擊,“配置屬性”-“鏈接器”-“輸入”-“附加依賴項”-“”,輸入“.ConsoleApplication1DebugAddFunc.obj”1.4 運行測
7、試工程查看結(jié)果1.4.1 設(shè)置 “公共語言運行時支持”如圖“圖表 1 11設(shè)置公共語言支持方法”所示。圖表 112設(shè)置公共語言支持方法描述:選中測試工程“UnitTest1”右擊,選擇“屬性”,“配置屬性”-“常規(guī)”-“公共語言運行時支持”-“公共語言運行時支持(/clr)”,按確定。1.4.2 打開“測試資源管理器”打開方法如圖“圖表 1 12打開“測試資源管理器”步驟”所示。圖表 113打開“測試資源管理器”步驟打開后可以看到右側(cè)添加了“測試資源管理器”,圖表 114“測試資源管理器”示意圖1.4.3 運行測試工程在“圖表 1 12“測試資源管理器”示意圖”中選中“TestMethod1”
8、右擊,選擇“運行選定的測試”。圖表 115選擇單元進(jìn)行測試測試結(jié)果顯示綠色,代表測試成功,如“圖表 1 13測試結(jié)果成功圖”所示。圖表 116測試結(jié)果成功圖1.5 添加其他的測試單元進(jìn)行測試1.5.1 添加頭文件#include./ConsoleApplication1/AddFunc.h#include./ConsoleApplication1/MultiFunc.h#include./ConsoleApplication1/SubFunc.h圖表 117添加所有需要測試單元的頭文件的示意圖1.5.2 添加obj.ConsoleApplication1DebugMultiFunc.obj.C
9、onsoleApplication1DebugSubFunc.obj圖表 118添加所有需要測試單元的obj示意圖1.5.3 添加測試單元代碼TestMethodvoid TestMethodMultiFunc()int na = 1, nb = 3, nExpect = 4;int nReal = MultiFunc(na, nb);Assert:AreEqual(nReal, nExpect);TestMethodvoid TestMethodSubFunc()int na = 1, nb = 3, nExpect = 4;int nReal = SubFunc(na, nb);Asser
10、t:AreEqual(nReal, nExpect);1.5.4 重新編譯生成測試工程“UnitTest_First”重新編譯生成后,“測試資源管理器”中添加了兩個測試單元,如圖“圖表 1 19新添加的測試單元示意圖”所示圖表 119新添加的測試單元示意圖可以看到是“TestMethodMultiFunc”和“TestMethodSubFunc”兩個測試單元為紅叉,是因為這兩個測試代碼不對。修改一下期望值,如下所示:/以下是自己添加的代碼。TestMethodvoid TestMethodMultiFunc()int na = 1, nb = 3, nExpect = 3;int nReal
11、= MultiFunc(na, nb);Assert:AreEqual(nReal, nExpect);TestMethodvoid TestMethodSubFunc()int na = 1, nb = 3, nExpect = -2;int nReal = SubFunc(na, nb);Assert:AreEqual(nReal, nExpect);再“重新生成”測試工程“UnitTest_First”,可以看到都為綠色了。圖表 120修改期望值后的測試結(jié)果也可以對沒有測試通過的代碼直接定位,假如沒有測試通過的結(jié)果如下:圖表 121直接定位沒有測試通過的測試單元定位方法:雙擊“TestM
12、ethodMultiFunc”就會出現(xiàn)哪個代碼沒有通過。大功告成! 有了好用的單元測試,以后寫C+代碼就有點靠譜的安全感了。1.6 參考筆記2011-5-15 GoogleTest也是一個不錯的C+單元測試框架。 如果項目引入了boost,還可以考慮boost.test庫。2011-12-16 若測試項目運行結(jié)果全部為黃色感嘆號錯誤,報錯為“System.IO.FileNotFoundException:找不到指定的模塊。(異常來自HRESULT:0x8007007E)”,可參考R6034解決方案。2011-12-27 VS2010創(chuàng)建的C+/CLI測試項目,Debug下默認(rèn)的運行時庫為“多線
13、程 DLL (/MD)”而不是“多線程調(diào)試 DLL (/MDd)”,這可能會造成鏈接時報LNK2022。參考:VC運行時庫2012-3-6 VS2008下若出現(xiàn)UnitTest長時間掛起,可采用KB970449熱修復(fù)。參考:VS2008 Unit test “Pending” and the test cannot be completed, 強大的stackoverflow!2012-5-19 VS2010下創(chuàng)建C+/CLI測試項目,默認(rèn)的“目標(biāo)文件名”為“DefaultTest”,當(dāng)同一個解決方案中包含多個測試項目時因目標(biāo)文件名相同,會沖突!可手工將每個項目的“目標(biāo)文件名”設(shè)置為“$(MS
14、BuildProjectName)”或其他合理值解決。2012-11-13 建議VS2012下的C+/CLI UnitTest項目設(shè)置如下:1. 調(diào)整“輸出目錄”為“$(Configuration)”,以避免同一個project在多個solution間共享時當(dāng)前路徑錯誤2. 調(diào)整“目標(biāo)文件名”為“$(MSBuildProjectName)”,以避免同一個solution內(nèi)多個C+/CLI UnitTest項目時目標(biāo)文件名沖突 VS2012下CLI UnitTest的CurrentDirectory為項目的輸出目錄,這和VS2008、VS2005是不同的2 VS2010 做單元測試,代碼覆蓋率直
15、接點擊 “測試”-“分析代碼覆蓋率”-“所有測試”就可以得到結(jié)果。圖表 21分析代碼覆蓋率結(jié)果2.1 參考筆記Precodition:VS2010 待測試工程 demo.dll ,被測試的工程是個dll,這個怎么寫就不介紹了.1. 在被測試工程的sln中,選擇 測試 菜單, 選擇 - , 確定.確定后,會在 解決方案資源管理器 中生成 Solution Items 和 TestProject4, 第一次應(yīng)該是 TestProject1, 這里p2plive 是被測試的DLL2. 在TestProject4種 引用 p2plive3. include 被測試dll 的 head 文件.屬性 - 配置屬性 - C/C+ -常規(guī) - 附加包含目錄 $(SolutionDir) 的相對路徑4. 編譯測試工程 TestProject4在測試文件中調(diào)用 被測試DLL的 API, 編譯出現(xiàn)各種錯誤提示,無法識別等.選擇 公共語言運行時支持(/clr) , 不能使用(/clr:safe)5. 設(shè)置代碼覆蓋率如圖, 選擇 數(shù)據(jù)和診斷, 雙擊 代碼覆蓋率, 選擇 p2plived.dll , 確定, 然后 另存 , 覆蓋.在測試工程和被測試工程中 設(shè)置 /Profi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息處理技術(shù)員職能測試試題及答案
- 2025屆貴陽市八下數(shù)學(xué)期末綜合測試模擬試題含解析
- 信息處理技術(shù)員技能試題及答案展示
- 軟件水平考試的改版動向與試題及答案
- 解密2025年網(wǎng)絡(luò)管理員考試試題及答案
- 營造積極氛圍的年度工作策略計劃
- 黑龍江省安達(dá)市一中學(xué)2025屆數(shù)學(xué)七下期末預(yù)測試題含解析
- 學(xué)校美術(shù)教育評估體系計劃
- 2025屆湖南省長沙市天心區(qū)部分學(xué)校八下數(shù)學(xué)期末考試模擬試題含解析
- 人工智能算法實際應(yīng)用試題及答案
- 福建福州事業(yè)單位考試筆試含答案2024
- 工會預(yù)算制度題庫(預(yù)算定稿)170題
- 【北京市人社局】2025年北京市人力資源市場薪酬數(shù)據(jù)報告(一季度)
- 安裝噴泉設(shè)備采購合同協(xié)議
- 2025年西藏自治區(qū)拉薩市城關(guān)區(qū)中考一模歷史試題(原卷版+解析版)
- 2025年鐵路車輛鉗工(技師)職業(yè)技能鑒定考試題庫(含答案)
- 2025中學(xué)教師資格證《體育學(xué)科知識與教學(xué)能力》考前通關(guān)必練題庫-含答案
- 2024中國人形機器人產(chǎn)業(yè)發(fā)展藍(lán)皮書1
- 新生兒重度窒息討論制度
- 警民聯(lián)調(diào)工作實施方案
- 實名制考勤管理制度
評論
0/150
提交評論