版权声明:若无来源注明,Techie亮博客文章均为原创。 转载请以链接形式标明本文标题和地址:
本文标题:Visual Studio(VS)C++单元测试     本文地址:http://techieliang.com/2017/12/516/

1. 新建一个待测项目MyProgram

新建了一个“Win32控制台应用程序”,在其内新建了“my_math.h”文件,为了方便没有建立类和.cpp文件,用一个简单的函数做范例。

  1. //my_math.h
  2. #pragma once
  3. int add(int a, int b) {
  4. return a + b;
  5. }

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测试文件说明

  1. #include "stdafx.h"
  2. #include "CppUnitTest.h"
  3. #include "../MyProgram/my_math.h" //添加原始项目的头文件,建议相对路径
  4. using namespace Microsoft::VisualStudio::CppUnitTestFramework;
  5. namespace MyProgramTest {//MyProgram项目单元测试
  6. TEST_CLASS(UnitTest1) {//测试类
  7. public:
  8. TEST_METHOD(TestMethod1) {//测试函数
  9. // TODO: 在此输入测试代码
  10. Assert::AreEqual(15, add(5, 10));
  11. }
  12. };
  13. }

自己包含原始项目被测函数头文件”#include “../MyProgram/my_math.h” //添加原始项目的头文件,建议相对路径”

UnitTest1为测试类名,TEST_CLASS为VS提供的测试类宏定义

  1. #define TEST_CLASS(className) \
  2. 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等多个方法以供测试中进行断言

  1. Assert.Inconclusive()//表示一个未验证的测试;
  2. Assert.AreEqual() //测试指定的值是否相等,如果相等,则测试通过;
  3. AreSame() //用于验证指定的两个对象变量是指向相同的对象,否则认为是错误
  4. AreNotSame() //用于验证指定的两个对象变量是指向不同的对象,否则认为是错误
  5. Assert.IsTrue() //测试指定的条件是否为True,如果为True,则测试通过;
  6. Assert.IsFalse() //测试指定的条件是否为False,如果为False,则测试通过;
  7. Assert.IsNull() //测试指定的对象是否为空引用,如果为空,则测试通过;
  8. 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++单元测试的更多相关文章

  1. Visual Studio中UnitTesting单元测试模板代码生成

             在软件研发过程中,单元测试的重要性直接影响软件质量.经验表明一个尽责的单元测试方法将会在软件开发的某个阶段发现很多的Bug,并且修改它们的成本也很低.在软件开发的后期阶段,Bug的发 ...

  2. Visual Studio 2013进行单元测试

    使用Visual Studio 2013进行单元测试--初级篇   1.打开VS2013 --> 新建一个项目.这里我们默认创建一个控制台项目.取名为UnitTestDemo 2.在解决方案里面 ...

  3. Visual Studio 中的单元测试 UNIT TEST

    原文:Visual Studio 中的单元测试 UNIT TEST 注:本文系作者原创,可随意转载,但请注明出处.如实在不愿注明可留空,强烈反对更改原创出处.TDD(Test-Driven Devel ...

  4. 基于Visual Studio .NET2015的单元测试

    基于Visual Studio .NET2015的单元测试 1.    在Visual Studio .NET2015中创建任意项目. 2.    在某个公共类的公共方法的名称上面点击右键,选择“创建 ...

  5. 使用Visual Studio 2013进行单元测试

    使用Visual Studio 2013进行单元测试 1.打开VS2013 --> 新建一个项目.这里我们默认创建一个控制台项目.取名为UnitTestDemo 2.在解决方案里面新增一个单元测 ...

  6. 基于Visual Studio .NET2015的单元测试 OpenCover

    https://www.cnblogs.com/XiaoRuLiang/p/10095723.html 基于Visual Studio .NET2015的单元测试 1.    在Visual Stud ...

  7. Visual Studio安装及单元测试

    一.安装环境 操作系统版本:Win10中文版64位 CPU:i5-4200M  2.50GHz 硬盘内存:500G 二.软件版本 Visual Studio 2013 三.安装过程 1.首先开始安装, ...

  8. Microsoft Visual Studio 2010 VSTS单元测试指南

    本来以为很简单的一个问题,今天预计10分钟搞定,结果到下班还没弄出结果,单元测试运行的时候一直处于无反应状态,最后估计可能是我装的2010有问题,结果到家一试果然是有问题,有时软件就是这么神奇. 言归 ...

  9. (第三周)使用visual studio 2015进行单元测试

    Microsoft visual studio是目前最流行的windows平台应用程序的集成开发环境.最新版本为 Visual Studio 2015 .Visual Studio 2015 包含许多 ...

随机推荐

  1. [POI2007]MEG-Megalopolis

    传送门:嘟嘟嘟 第一反应是树链剖分,但是太长懒得写,然后就想出了一个很不错的做法. 想一下,如果我们改一条边,那么影响的只有他的子树,只要先搞一个dfs序,为什么搞出这个呢?因为有一个性质:一个节点的 ...

  2. 2018.4.26 Mac安装Redis5.0.3版本服务器

    Mac安装Redis服务器 安装 1.到官网下载 选择稳定版本 打开官网:https://redis.io/ 2.下载完成后,打开命令行工具,执行解压命令 tar zxvf redis-5.0.3.t ...

  3. Node.js实战(八)之回调函数

    Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都 ...

  4. 集成Glide4.3.1出错!AbstractMethodError: abstract method "void com.bumptech.glide.module

    项目中原本是用的Glide3.7.0,一切功能正常,但是集成了网易云信的UIKIT后,就出问题了,发现是Glide4.0的问题. Glide4.0,始终会报这么一个错,就算是最简单的加载也仍然报错. ...

  5. WorldWind源码剖析系列:插件类Plugin、插件信息类PluginInfo和插件编译器类PluginCompiler

    插件类Plugin是所有由插件编译器加载的插件子类的抽象父类,提供对插件的轻量级的访问控制功能. 插件信息类PluginInfo用来存储关于某个插件的信息的类,可以理解为对插件类Plugin类的进一步 ...

  6. ICSharpCode.SharpZipLib 开源压缩库使用示例

    官方网站:http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx 插件描述: ICSharpCode.SharpZipLib.dl ...

  7. Jquery简单的placeholder效果

    Jquery简单的placeholder效果 由于IE6-IE9不支持HTML5中的placeholder,所以自己依赖于Jquery简单的写了一个,供参考! 先看看效果吧!如下JSFiddle地址 ...

  8. 2018-2019-2 20175308实验一 《Java开发环境的熟悉》实验报告

    2018-2019-2-20175308 实验一 <Java开发环境的熟悉>实验报告 一.实验内容及步骤 (一)使用JDk编译.运行简单的Java程序 输入cd Code命令进入Code目 ...

  9. 解决eth0网卡无法自动加载的问题

    问题:输入ifup eth0显示无法加载网卡所在的文件 解决办法: vi /etc/rc.d/rc.local 最后一行加入: ifup eth0 然后重启虚拟机即可解决问题. 本文为博主原创文章,未 ...

  10. 大数据入门第二十天——scala入门(二)scala基础02

    一. 类.对象.继承.特质 1.类 Scala的类与Java.C++的类比起来更简洁 定义: package com.jiangbei //在Scala中,类并不用声明为public. //Scala ...