带你玩转Visual Studio——单元测试
来源:互联网 发布:蓝光播放器网络排名 编辑:程序博客网 时间:2024/05/16 09:22
原文链接:http://blog.csdn.net/luoweifu/article/details/51534627
上一篇文章带你玩转Visual Studio——性能分析与优化讲了找出性能瓶颈和性能优化相关的技能,在大型企业项目的开发中,性能是固然重要的,而另一个过程——测试也是必不可少的。测试有很多的各类:功能测试、系统测试、白盒测试、黑盒测试、单元测试,在这些测试中单元测试是程序员最经过遇到的。
什么是单元测试
所谓单元测试(unit testing),就是对软件中的最小单元进行检查和验证,其一般验证对象是一个函数或者一个类。
对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里或C++里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。
单元测试的作用:
- 确定自己的代码功能和逻辑的正确性;
- 发现问题并及早地改进一些不当的设计;
- 对于一些被依赖信很强的代码作修改时,确保逻辑的正确才能不影响其它模块的功能;
- 更好地管理和保存测试代码,以便下次代码修改后可方便地进行Debugging;
VC++的单元测试
我们继续使用上一章带你玩转Visual Studio——性能分析与优化的案例和代码。经过上一文的优化,我们的代码性能是提高了,但每个函数是否正确无误并没有经过验证。现在就用单元测试进行椎一下。
使用UnitText工程
1、 在Solution中添加一个UnitTest的项目
图1: 添加UnitTest工程
,关于多工程的开发,请参考《带你玩转Visual Studio——带你多工程开发》
2、这时会自动帮我们创建一个unittest1.cpp并生成部分初始代码。(如果没有自动生成也可自己手动添加.cpp文件并编写测试代码)
图2: 工程目录
3、根据给定的初始代码框架,编写测试代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
说明:
TEST_METHOD是一个测试宏,每一个宏对应一个测试单元。大括号({})内的内容是这个测试单元的测试代码。
4、进行单元测试
选择Test->Windows->Test Explorer菜单,打开单元测试的工具窗口
图3: 测试资源管理器窗口
测试方法:
(1).选择其中的一个或多个单元,右键鼠标->Run Selected Tests,
(2).点击”Run All”,测试所有单元。
如果测试成功,Output窗口会有类似如下的提示:
========== Run test finished: 2 run (0:00:00.7490429) ==========
测试项的标记色会变成绿色:
图4: 测试成功标记色
ManagedTest工程
我们在图1中可以看到有两个跟测试相关的工程,一个是Native Unit Test Project(上面已经讲了),一个是Managed Test Project。其实这两个工程都可用来进行单元测试,Managed Test Project提供了更全面的功能,如对类的开始初始化和结束销毁的处理,每个测试方法前后进行初始化和销毁处理等。而Unit Test Project相当于是对Managed Test Project的一种封装,只提供最简单、最常用的测试功能,而帮我们默认处理很多繁琐的工作。在VS2013及之前版本的VisualStudio只有Managed Test Project类型的工程(之前的版本名称好像为Test Project)。
1、添加Managed Test Project工程,完成之后会自动帮我们创建UnitTest.cpp文件和初始代码框架。
2、修改UnitTest.cpp,添加自己的测试代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
3、编译工程。
编译时,如果出现类似如下的错误:
1>VisualStudioProject.lib(Prime.obj) : warning LNK4075: ignoring ‘/EDITANDCONTINUE’ due to ‘/OPT:LBR’ specification
1>VisualStudioProject.lib(Prime.obj) : error LNK2019: unresolved external symbol __imp___invalid_parameter referenced in function “public: char const & __thiscall
1>VisualStudioProject.lib(Prime.obj) : error LNK2019: unresolved external symbol __imp___CrtDbgReportW referenced in function “public: char const & __thiscall
1>msvcprtd.lib(locale0_implib.obj) : error LNK2019: unresolved external symbol __imp___free_dbg referenced in function “public: static void __cdecl std::_Fac_node::operator delete(void *)” (??3_Fac_node@std@@SAXPAX@Z)
1>msvcprtd.lib(locale0_implib.obj) : error LNK2019: unresolved external symbol __imp___malloc_dbg referenced in function “public: static void * __cdecl std::_Fac_node::operator new(unsigned int)” (??2_Fac_node@std@@SAPAXI@Z)
1>D:\CppWorkspace\VS2015\ConsoleApplication1\Debug\DefaultTest.dll : fatal error LNK1120: 4 unresolved externals
右键工程属性(Properties) Configuration Properties -> C/C++ -> Code Generation -> Runtime Library, 将运行库的方式改为 “Multi-Threaded Debug DLL (/MDd)”
4、运行测试代码
测试结果
- 带你玩转Visual Studio——单元测试
- 带你玩转Visual Studio——单元测试
- 带你玩转Visual Studio——开篇介绍
- 带你玩转Visual Studio——结局汇总
- 带你玩转Visual Studio——结局汇总
- 带你玩转Visual Studio——开篇介绍
- 带你玩转Visual Studio——带你新建一个工程
- 带你玩转Visual Studio——带你了解VC++各种类型的工程
- 带你玩转Visual Studio——带你高效开发
- 带你玩转Visual Studio——带你高效管理代码
- 带你玩转Visual Studio——带你发布自己的工程库
- 带你玩转Visual Studio——带你管理多种释出版本
- 带你玩转Visual Studio——带你多工程开发
- 带你玩转Visual Studio——带你了解VC++各种类型的工程
- 带你玩转Visual Studio——带你新建一个工程
- 带你玩转Visual Studio——带你了解VC++各种类型的工程
- 带你玩转Visual Studio——带你高效开发
- 带你玩转Visual Studio——带你高效管理代码
- 编译安装nginx出错:the HTTP rewrite module requires the PCRE library.
- java强制类型转换
- 【pta】实验2-1-3 计算物体自由下落的距离
- 第三十一讲项目3.1-求s=1!+2!+……10!,即求1到10的阶乘和
- redis实现session共享
- 带你玩转Visual Studio——单元测试
- jpa 本地查询 获取部分字段值
- JAVA写的模拟收发器设备面板工作状态并输出图形界面
- iOS微信支付
- c++类型转换
- Google的Gson不写类模板,直接解析Json,获取属性值的方法
- java并发锁ReentrantReadWriteLock读写锁源码分析
- Java基础-集合框架10 枚举
- Android源码分析-全面理解Context