




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、VS2012 C+單元測試和代碼覆蓋率1 VS2012下C+代碼簡單單元測試在網上關于VS2008 VS2010 VS2012的單元測試幾乎都是關于C#的單元測試,我測試了一下,C#的單元測試確實好用,然而關于C+的單元測試很少,在這里我來簡單的介紹一下步驟。普通的工程關鍵步驟是要包含頭文件和obj文件;如果是要測試靜態(tài)庫或者動態(tài)庫,關鍵步驟是要包含頭文件和lib文件。1.1 在VS2012中建立要測試的簡單的工程在這里要測試的代碼建立如下:新建一個“Win32控制臺應用程序”,默認它的名稱“ConsoleApplication1”,圖表 11新建“Win32控制臺應用程序”圖表 12進入向導
2、圖表 13進入向導2在“進入向導2”中選擇 “空項目”。然后按“完成”。然后添加頭文件和源代碼文件,文件目錄如下:圖表 14簡單代碼目錄結構下面是具體的代碼:/AddFunc.h#ifndef _ADD_FUNC_H_#define _ADD_FUNC_H_int AddFunc(int a, int b);#endif /AddFunc.cpp#include"AddFunc.h"int AddFunc(int a, int b)return a + b; /MultiFunc.h#ifndef _MULTI_FUNC_H_#define _MULTI_FUNC_H_in
3、t MultiFunc(int a, int b);#endif /MultiFunc.cpp#include"MultiFunc.h"int 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#include"SubFunc.h"int SubFunc(int a, int b)return a - b; /main.cpp#include
4、"AddFunc.h"#include "SubFunc.h"#include "MultiFunc.h"int main(int argc, char* argv)return 0;編譯鏈接此工程,生成一系列的obj文件。在這里我要對上面的函數進行單元測試。1.2 建立測試工程選中“解決方案”ConsoleApplication1 (1個項目)”后右鍵點擊,選中“添加”->“新建項目”,如 “圖表 1 5新建測試工程”所示。圖表 15新建測試工程選擇“測試”->“托管測試項目”,輸入名稱“UnitTest_First”,
5、按“確定”圖表 16新建UnitTest1測試工程建立測試工程后的目錄結構如“圖表 1 7建立測試工程后的目錄結構”所示圖表 17建立測試工程后的目錄結構選中測試工程中的“UnitTest.cpp”源文件,打開看一下代碼如圖“”所示。圖表 18 源文件UnitTest.cpp 的代碼主要用的測試模塊在using namespace Microsoft:VisualStudio:TestTools:UnitTesting;中。1.3 編寫測試工程中的測試代碼先編寫一個對于加法的簡單測試代碼,在“void TestMethod1()”下添加如下測試代碼:int na = 1, nb = 3, nE
6、xpect = 4;int nReal = AddFunc(na, nb);Assert:AreEqual(nReal, nExpect);當然得把加法的頭文件包含過來。#include"./ConsoleApplication1/AddFunc.h"添加頭文件和代碼后的代碼如圖“圖表 1 9添加頭文件后的代碼”和“圖表 1 10添加測試加法源代碼后的代碼”所示。圖表 19添加頭文件后的代碼圖表 110添加測試加法源代碼后的代碼還得把加法的obj文件包含進來。添加方法如圖“圖表 1 10添加被測試工程的obj”所示。圖表 111添加被測試工程的obj描述:選中測試工程“Un
7、itTest_First”右擊,“配置屬性”->“鏈接器”->“輸入”->“附加依賴項”->“<編輯>”,輸入“.ConsoleApplication1DebugAddFunc.obj”1.4 運行測試工程查看結果1.4.1 設置 “公共語言運行時支持”如圖“圖表 1 11設置公共語言支持方法”所示。圖表 112設置公共語言支持方法描述:選中測試工程“UnitTest1”右擊,選擇“屬性”,“配置屬性”->“常規(guī)”->“公共語言運行時支持”->“公共語言運行時支持(/clr)”,按確定。1.4.2 打開“測試資源管理器”打開方法如圖“圖表
8、1 12打開“測試資源管理器”步驟”所示。圖表 113打開“測試資源管理器”步驟打開后可以看到右側添加了“測試資源管理器”,圖表 114“測試資源管理器”示意圖1.4.3 運行測試工程在“圖表 1 12“測試資源管理器”示意圖”中選中“TestMethod1”右擊,選擇“運行選定的測試”。圖表 115選擇單元進行測試測試結果顯示綠色,代表測試成功,如“圖表 1 13測試結果成功圖”所示。 圖表 116測試結果成功圖 1.5 添加其他的測試單元進行測試1.5.1 添加頭文件#include"./ConsoleApplication1/AddFunc.h"#
9、include"./ConsoleApplication1/MultiFunc.h"#include"./ConsoleApplication1/SubFunc.h"圖表 117添加所有需要測試單元的頭文件的示意圖1.5.2 添加obj.ConsoleApplication1DebugMultiFunc.obj.ConsoleApplication1DebugSubFunc.obj圖表 118添加所有需要測試單元的obj示意圖1.5.3 添加測試單元代碼TestMethodvoid TestMethodMultiFunc()int na = 1, nb
10、= 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);Assert:AreEqual(nReal, nExpect);1.5.4 重新編譯生成測試工程“UnitTest_First”重新編譯生成后,“測試資源管理器”中添加了兩個測試單元,如圖“圖表 1 19新添加的測試單元示意圖”所示圖表 119新添加的測
11、試單元示意圖可以看到是“TestMethodMultiFunc”和“TestMethodSubFunc”兩個測試單元為紅叉,是因為這兩個測試代碼不對。修改一下期望值,如下所示:/以下是自己添加的代碼。TestMethodvoid TestMethodMultiFunc()int na = 1, nb = 3, nExpect = 3;int nReal = MultiFunc(na, nb);Assert:AreEqual(nReal, nExpect);TestMethodvoid TestMethodSubFunc()int na = 1, nb = 3, nExpect = -2;int
12、 nReal = SubFunc(na, nb);Assert:AreEqual(nReal, nExpect);再“重新生成”測試工程“UnitTest_First”,可以看到都為綠色了。圖表 120修改期望值后的測試結果也可以對沒有測試通過的代碼直接定位,假如沒有測試通過的結果如下:圖表 121直接定位沒有測試通過的測試單元定位方法:雙擊“TestMethodMultiFunc”就會出現哪個代碼沒有通過。 大功告成! 有了好用的單元測試,以后寫C+代碼就有點靠譜的安全感了。1.6 參考筆記 2011-5-15
13、 GoogleTest也是一個不錯的C+單元測試框架。 如果項目引入了boost,還可以考慮boost.test庫。2011-12-16 若測試項目運行結果全部為黃色感嘆號錯誤,報錯為“System.IO.FileNotFoundException:找不到指定的模塊。(異常來自HRESULT:0x8007007E)”,可參考R6034解決方案。2011-12-27 VS2010創(chuàng)建的C+/CLI測試項目,Debug下默認的運行時庫為“多線程 DLL (/MD)”而不是“多線程調試 DLL (/MD
14、d)”,這可能會造成鏈接時報LNK2022。參考:VC運行時庫2012-3-6 VS2008下若出現UnitTest長時間掛起,可采用KB970449熱修復。參考: VS2008 Unit test “Pending” and the test cannot be completed, 強大的stackoverflow!2012-5-19 VS2010下創(chuàng)建C+/CLI測試項目,默認的“目標文件名”為“DefaultTest”,當同一個解決方案中包含多個測試項目時因目標文件名相同,會沖突!可手工將每個項目的“目標
15、文件名”設置為“$(MSBuildProjectName)”或其他合理值解決。2012-11-13 建議VS2012下的C+/CLI UnitTest項目設置如下:1. 調整“輸出目錄”為“$(Configuration)”,以避免同一個project在多個solution間共享時當前路徑錯誤2. 調整“目標文件名”為“$(MSBuildProjectName)”,以避免同一個solution內多個C+/CLI UnitTest項目時目標文件名沖突 VS2012下CLI UnitTest的CurrentDirectory為項目的輸出
16、目錄,這和VS2008、VS2005是不同的2 VS2010 做單元測試,代碼覆蓋率直接點擊 “測試”->“分析代碼覆蓋率”->“所有測試”就可以得到結果。圖表 21分析代碼覆蓋率結果2.1 參考筆記Precodition: VS2010 待測試工程 demo.dll ,被測試的工程是個dll,這個怎么寫就不介紹了.1. 在被測試工程的sln中,選擇 測試 菜單, 選擇 <新建測試> -> <單元測試> , 確定. 確定后,會在 "解
17、決方案資源管理器" 中生成 "Solution Items" 和 TestProject4, 第一次應該是 TestProject1, 這里p2plive 是被測試的DLL2. 在TestProject4種 "引用" p2plive3. include 被測試dll 的 head 文件.屬性 -> 配置屬性 -> C/C+ ->常規(guī) -> 附加包含目錄 $(SolutionDir) 的相對路徑4. 編譯測試工程 TestPr
18、oject4在測試文件中調用 被測試DLL的 API, 編譯出現各種錯誤提示,無法識別等. 選擇 公共語言運行時支持(/clr) , 不能使用(/clr:safe)5. 設置代碼覆蓋率如圖, 選擇 數據和診斷, 雙擊 "代碼覆蓋率", 選擇 p2plived.dll , "確定", 然后 "另存" , 覆蓋.在測試工程和被測試工程中 設置 /Profile, 否則無法生成 覆蓋率 文件.6 設置測試"測試" -> "選擇活動的測試設置" -> "Local testsetting""測試" -> "窗口" -
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030起重鉗市場前景分析及投資策略與風險管理研究報告
- 2025-2030調味品項目行業(yè)深度調研及投資前景預測研究報告
- 2025-2030苦參總堿產業(yè)發(fā)展分析及發(fā)展趨勢與投資前景預測報告
- 程序員創(chuàng)業(yè)項目市場定位-全面剖析
- 2025-2030臭氧系統(tǒng)設備行業(yè)市場深度調研及前景趨勢與投資研究報告
- 2025-2030網絡游戲廣告產業(yè)市場深度分析及前景趨勢與投資研究報告
- 2025-2030糖果市場發(fā)展分析及行業(yè)投資戰(zhàn)略研究報告
- 2025-2030游樂園產業(yè)發(fā)展分析及發(fā)展趨勢與投資前景預測報告
- 2025-2030柴油內燃機市場前景分析及投資策略與風險管理研究報告
- 2025-2030服務機器人市場前景分析及投資策略與風險管理研究報告
- 創(chuàng)新創(chuàng)業(yè)案例分析-大疆
- 2025年天津市濱城海洋文化旅游發(fā)展有限公司招聘筆試參考題庫附帶答案詳解
- 《園林微景觀設計與制作》課件-項目三 微景觀制作
- 2025年國家發(fā)展和改革委員會國家節(jié)能中心面向應屆畢業(yè)生招聘工作人員3人歷年自考難、易點模擬試卷(共500題附帶答案詳解)
- 衍紙簡介課件
- 2025年全國國家版圖知識測試競賽題庫(附答案)
- 入團考試模擬100題及答案
- 2025年上海青浦新城發(fā)展(集團)限公司自主招聘9名自考難、易點模擬試卷(共500題附帶答案詳解)
- 玉盤二部合唱正譜
- 2025年官方策劃標準離婚協議書(民政局版)
- 放射防護知識培訓課件
評論
0/150
提交評論