Visual Studio(VS)C++单元测试
本文标题:Visual Studio(VS)C++单元测试 本文地址:http://techieliang.com/2017/12/516/
1. 新建一个待测项目MyProgram

新建了一个“Win32控制台应用程序”,在其内新建了“my_math.h”文件,为了方便没有建立类和.cpp文件,用一个简单的函数做范例。
- //my_math.h
 - #pragma once
 - int add(int a, int b) {
 - return a + b;
 - }
 
1.1. 新建一个测试项目MyProgramTest
此处要选择Visual C++->测试->本机单元测试项目,填写好名称,点击确定即可,不需要其他配置就会在当前解决方案下新建出项目。

注意新建的时候直接右键选择当前解决方案-添加-新建项目,这样默认为当前解决方案
系统默认生成了四个文件“stdafx.h”、“stdafx.cpp”(Standard Application Framework
Extensions)预编译头文件,“targetver.h”运行环境定义头文件,“unittest1.cpp”测试文件。前三个不用管,直接看第四个测试文件即可。
1.2. 必要的配置
新建完成MyProgramTest项目以后,在属性-连接器-输入-附加依赖项中添加“..\MyProgram\Debug\*.obj”

建议使用相对路径,使用*表明所有.obj后缀文件。注意只需要配置单元测试项目,不需要对原项目做任何修改。
obj文件(Microsoft推出的程序编译中间代码文件),程序编译时生成的中间代码文件。目标文件,一般是程序编译后的二进制文件,再通过链接器和资源文件链接就成可执行文件了。OBJ只给出了程序的相对地址,而可执行文件是绝对地址。
2. XXXtext.cpp测试文件说明
- #include "stdafx.h"
 - #include "CppUnitTest.h"
 - #include "../MyProgram/my_math.h" //添加原始项目的头文件,建议相对路径
 - using namespace Microsoft::VisualStudio::CppUnitTestFramework;
 - namespace MyProgramTest {//MyProgram项目单元测试
 - TEST_CLASS(UnitTest1) {//测试类
 - public:
 - TEST_METHOD(TestMethod1) {//测试函数
 - // TODO: 在此输入测试代码
 - Assert::AreEqual(15, add(5, 10));
 - }
 - };
 - }
 
自己包含原始项目被测函数头文件”#include “../MyProgram/my_math.h” //添加原始项目的头文件,建议相对路径”
UnitTest1为测试类名,TEST_CLASS为VS提供的测试类宏定义
- #define TEST_CLASS(className) \
 - ONLY_USED_AT_NAMESPACE_SCOPE class className : public ::Microsoft::VisualStudio::CppUnitTestFramework::TestClass<className>
 
TestMethod1为测试函数名,TEST_METHOD为VS提供的测试函数宏定义
Assert为断言类,其提供了AreEqual、AreSame、AreNotEqual、AreNotSame、IsNull、IsNotNull、IsTrue、IsFalse等多个方法以供测试中进行断言
- Assert.Inconclusive()//表示一个未验证的测试;
 - Assert.AreEqual() //测试指定的值是否相等,如果相等,则测试通过;
 - AreSame() //用于验证指定的两个对象变量是指向相同的对象,否则认为是错误
 - AreNotSame() //用于验证指定的两个对象变量是指向不同的对象,否则认为是错误
 - Assert.IsTrue() //测试指定的条件是否为True,如果为True,则测试通过;
 - Assert.IsFalse() //测试指定的条件是否为False,如果为False,则测试通过;
 - Assert.IsNull() //测试指定的对象是否为空引用,如果为空,则测试通过;
 - Assert.IsNotNull() //测试指定的对象是否为非空,如果不为空,则测试通过;
 
若需要多个测试函数,只需要在public:下建立多个TEST_METHOD即可
若需要多个测试类,可以新建一些cpp文件,注意包含vs单元测试文件CppUnitTest.h
3. 运行单元测试
单元测试运行,不需要提前先编译原始程序,运行测试时会自动编译。
在菜单栏-测试-运行选择运行所有测试即可

选择此项后会先编译目标项目,然后执行所有测试类中的public中的测试函数(有不需要测试的可以临时改为private)。
测试结果会在测试资源管理器显示

若此窗口不自动弹出,可在菜单栏-测试-窗口打开

4. 其他
4.1. 并行测试
“测试资源管理器”搜索框左侧的三个双向箭头按钮,点击他会进入选中状态,即开启了并行测试功能。
4.2. 代码覆盖率测试
对于VS2015 Enterprise版本在测试菜单下“分析代码覆盖率”可以利用当前单元测试分析对原始项目的代码覆盖率。
VS2015 Community版本没有分析代码覆盖率功能
Visual Studio(VS)C++单元测试的更多相关文章
- Visual Studio中UnitTesting单元测试模板代码生成
		
在软件研发过程中,单元测试的重要性直接影响软件质量.经验表明一个尽责的单元测试方法将会在软件开发的某个阶段发现很多的Bug,并且修改它们的成本也很低.在软件开发的后期阶段,Bug的发 ...
 - Visual Studio 2013进行单元测试
		
使用Visual Studio 2013进行单元测试--初级篇 1.打开VS2013 --> 新建一个项目.这里我们默认创建一个控制台项目.取名为UnitTestDemo 2.在解决方案里面 ...
 - Visual Studio 中的单元测试 UNIT TEST
		
原文:Visual Studio 中的单元测试 UNIT TEST 注:本文系作者原创,可随意转载,但请注明出处.如实在不愿注明可留空,强烈反对更改原创出处.TDD(Test-Driven Devel ...
 - 基于Visual Studio .NET2015的单元测试
		
基于Visual Studio .NET2015的单元测试 1. 在Visual Studio .NET2015中创建任意项目. 2. 在某个公共类的公共方法的名称上面点击右键,选择“创建 ...
 - 使用Visual Studio 2013进行单元测试
		
使用Visual Studio 2013进行单元测试 1.打开VS2013 --> 新建一个项目.这里我们默认创建一个控制台项目.取名为UnitTestDemo 2.在解决方案里面新增一个单元测 ...
 - 基于Visual Studio .NET2015的单元测试  OpenCover
		
https://www.cnblogs.com/XiaoRuLiang/p/10095723.html 基于Visual Studio .NET2015的单元测试 1. 在Visual Stud ...
 - Visual Studio安装及单元测试
		
一.安装环境 操作系统版本:Win10中文版64位 CPU:i5-4200M 2.50GHz 硬盘内存:500G 二.软件版本 Visual Studio 2013 三.安装过程 1.首先开始安装, ...
 - Microsoft Visual Studio 2010 VSTS单元测试指南
		
本来以为很简单的一个问题,今天预计10分钟搞定,结果到下班还没弄出结果,单元测试运行的时候一直处于无反应状态,最后估计可能是我装的2010有问题,结果到家一试果然是有问题,有时软件就是这么神奇. 言归 ...
 - (第三周)使用visual studio 2015进行单元测试
		
Microsoft visual studio是目前最流行的windows平台应用程序的集成开发环境.最新版本为 Visual Studio 2015 .Visual Studio 2015 包含许多 ...
 
随机推荐
- leetcode322—Coin Change
			
You are given coins of different denominations and a total amount of money amount. Write a function ...
 - P1312 Mayan游戏
			
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
 - (转)公有云vr客户端tcp连接数太多造成 系统卡顿问题 [bittorrent tracker优化]  -公有云常见网络问题及思路
			
在公有云服务器 发现使用tcp(http)的tracker连接数太多 用户太多会造成windows系统卡顿 特此发表一下修改配置和路由器的方法 解决卡顿问题 解决方法1(参考内容): 修改 /etc/ ...
 - jqgrid 设置多表头
			
有时,我们需要给jqgrid设置多表头信息,多表头区域会有行合并/列合并,如何实现? 1)通过jqgrid的 setGroupHeaders 方法来实现一个行的多表头, 2)如果有多行表头,需要设置多 ...
 - struts2_文件上传的功能
			
使用Struts内置的fileUpload拦截器(已默认配置)即可,设计的电商网站,提供用户头像上传的功能 1. 2. 3. 4. 5. 5.未使用拦截器 6.未使用filename 7. 8. 9.
 - 2《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——操作文件
			
已经学习了基本的命令,现在是时候学习操作文件了,这也是命令行的重要任务.还是基于本教程的事先规定,本教程是入门级的,不要求熟悉类似编辑文本的程序(这些文本编辑程序,将在下个系列教程中介绍, Learn ...
 - 20155238 2016-2017-2 《JAVA程序设计》第十周学习总结
			
教材学习内容总结 # Java计算机网络基础 计算机网络 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使 ...
 - 12、JAVA内存模型与线程
			
一.JMM 有序性,可见性,原子性 synchorize :3个性都有: volatile:保证可见性+禁止指令重排: 二.线程的五种状态 面向过程与面向对象的差别 面向过程:站在计算机的角度分析和解 ...
 - L017-linux系统定时任务crond入门小节
			
L017-linux系统定时任务crond入门小节 oh my god!how old are you? 怎么老是你?没错,我又来了,哈哈哈,今天是我的生日呢,在这么重要的日子里,必须要更一篇学习小节 ...
 - [CF917D]Stranger Trees[矩阵树定理+解线性方程组]
			
题意 给你 \(n\) 个点的无向完全图,指定一棵树 \(S\),问有多少棵生成树和这棵树的公共边数量为 \(k\in[0,n-1]\) \(n\leq 100\) 分析 考虑矩阵树定理,把对应的树边 ...