




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VS2012 C+单元测试和代码覆盖率1 VS2012下C+代码简单单元测试在网上关于VS2008 VS2010 VS2012的单元测试几乎都是关于C#的单元测试,我测试了一下,C#的单元测试确实好用,然而关于C+的单元测试很少,在这里我来简单的介绍一下步骤。普通的工程关键步骤是要包含头文件和obj文件;如果是要测试静态库或者动态库,关键步骤是要包含头文件和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#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文件。在这里我要对上面的函数进行单元测试。1.2 建立测试工程选中“解决方案”ConsoleApplication1 (1个项目)”后右键点击,选中“添加”-“新建项目”,如 “图表 1 5新建测试工程”所示。图表 15新建测试工程选择“测试”-“托管测试项目”,输入名称“UnitTest_First”,按“确定”图表 16新建UnitTest1测试工程建立测试工程后的目录结构如“图表 1 7建立测试工程后的目录结构”所示图表 17建立测试工程后的目录结构选中测
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);当然得把加法的头文件
6、包含过来。#include./ConsoleApplication1/AddFunc.h添加头文件和代码后的代码如图“图表 1 9添加头文件后的代码”和“图表 1 10添加测试加法源代码后的代码”所示。图表 19添加头文件后的代码图表 110添加测试加法源代码后的代码还得把加法的obj文件包含进来。添加方法如图“图表 1 10添加被测试工程的obj”所示。图表 111添加被测试工程的obj描述:选中测试工程“UnitTest_First”右击,“配置属性”-“链接器”-“输入”-“附加依赖项”-“”,输入“.ConsoleApplication1DebugAddFunc.obj”1.4 运行测
7、试工程查看结果1.4.1 设置 “公共语言运行时支持”如图“图表 1 11设置公共语言支持方法”所示。图表 112设置公共语言支持方法描述:选中测试工程“UnitTest1”右击,选择“属性”,“配置属性”-“常规”-“公共语言运行时支持”-“公共语言运行时支持(/clr)”,按确定。1.4.2 打开“测试资源管理器”打开方法如图“图表 1 12打开“测试资源管理器”步骤”所示。图表 113打开“测试资源管理器”步骤打开后可以看到右侧添加了“测试资源管理器”,图表 114“测试资源管理器”示意图1.4.3 运行测试工程在“图表 1 12“测试资源管理器”示意图”中选中“TestMethod1”
8、右击,选择“运行选定的测试”。图表 115选择单元进行测试测试结果显示绿色,代表测试成功,如“图表 1 13测试结果成功图”所示。图表 116测试结果成功图1.5 添加其他的测试单元进行测试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修改期望值后的测试结果也可以对没有测试通过的代码直接定位,假如没有测试通过的结果如下:图表 121直接定位没有测试通过的测试单元定位方法:双击“TestM
12、ethodMultiFunc”就会出现哪个代码没有通过。大功告成! 有了好用的单元测试,以后写C+代码就有点靠谱的安全感了。1.6 参考笔记2011-5-15 GoogleTest也是一个不错的C+单元测试框架。 如果项目引入了boost,还可以考虑boost.test库。2011-12-16 若测试项目运行结果全部为黄色感叹号错误,报错为“System.IO.FileNotFoundException:找不到指定的模块。(异常来自HRESULT:0x8007007E)”,可参考R6034解决方案。2011-12-27 VS2010创建的C+/CLI测试项目,Debug下默认的运行时库为“多线
13、程 DLL (/MD)”而不是“多线程调试 DLL (/MDd)”,这可能会造成链接时报LNK2022。参考:VC运行时库2012-3-6 VS2008下若出现UnitTest长时间挂起,可采用KB970449热修复。参考:VS2008 Unit test “Pending” and the test cannot be completed, 强大的stackoverflow!2012-5-19 VS2010下创建C+/CLI测试项目,默认的“目标文件名”为“DefaultTest”,当同一个解决方案中包含多个测试项目时因目标文件名相同,会冲突!可手工将每个项目的“目标文件名”设置为“$(MS
14、BuildProjectName)”或其他合理值解决。2012-11-13 建议VS2012下的C+/CLI UnitTest项目设置如下:1. 调整“输出目录”为“$(Configuration)”,以避免同一个project在多个solution间共享时当前路径错误2. 调整“目标文件名”为“$(MSBuildProjectName)”,以避免同一个solution内多个C+/CLI UnitTest项目时目标文件名冲突 VS2012下CLI UnitTest的CurrentDirectory为项目的输出目录,这和VS2008、VS2005是不同的2 VS2010 做单元测试,代码覆盖率直
15、接点击 “测试”-“分析代码覆盖率”-“所有测试”就可以得到结果。图表 21分析代码覆盖率结果2.1 参考笔记Precodition:VS2010 待测试工程 demo.dll ,被测试的工程是个dll,这个怎么写就不介绍了.1. 在被测试工程的sln中,选择 测试 菜单, 选择 - , 确定.确定后,会在 解决方案资源管理器 中生成 Solution Items 和 TestProject4, 第一次应该是 TestProject1, 这里p2plive 是被测试的DLL2. 在TestProject4种 引用 p2plive3. include 被测试dll 的 head 文件.属性 - 配置属性 - C/C+ -常规 - 附加包含目录 $(SolutionDir) 的相对路径4. 编译测试工程 TestProject4在测试文件中调用 被测试DLL的 API, 编译出现各种错误提示,无法识别等.选择 公共语言运行时支持(/clr) , 不能使用(/clr:safe)5. 设置代码覆盖率如图, 选择 数据和诊断, 双击 代码覆盖率, 选择 p2plived.dll , 确定, 然后 另存 , 覆盖.在测试工程和被测试工程中 设置 /Profi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小区设施面试题及答案
- 社会化媒体战略与品牌传播效果的分析能力试题及答案
- 大学化学2025年考团支部试题及答案
- 新能源汽车与可再生能源结合试题及答案
- 心灵灵魂测试题及答案
- 考研英语有几套试题及答案
- 影视技术考试试题及答案
- 大学化学未来趋势考题及答案
- 法学博士试题及答案
- 节奏规律与音阶构成试题及答案
- DL-T5241-2010水工混凝土耐久性技术规范
- 静脉导管常见并发症临床护理实践指南
- 围手术期血糖管理专家共识
- 上肢肘腕关节松动术
- 2024年3月昆明市高三语文三诊一模考试卷附答案解析
- (高清版)DZT 0419.3-2022 矿产资源潜力评价规范(1:250 000)第3部分:成矿规律研究
- 科学道德与学术规范知识试题及答案
- 将健康社区纳入社区发展规划
- 痛风科普讲座课件
- 心肌梗死的早期识别与紧急处理
- 国开【形考】《管理英语(3)》形成性考核1-8答案
评论
0/150
提交评论