在Visual Studio中如何对C++项目进行单元测试(适用于Visual Studio 2017及以上的专业版和企业版)

Visual Studio 2017及以后的版本自带了以下几种测试框架,这里我以Microsoft Unit Testing Framework for C++为例,因为这个是默认安装的,后面几种都是需要在Visual Studio安装程序中钩选安装才能使用。

  • Microsoft Unit Testing Framework for C++
  • Google Test
  • Boost.Test
  • CTest

如果是Visual Studio 2015及以前的版本,可以在Visual Studio市场中下载扩展来达到同样的功能。

 

这里分两种情况:一种是有导出函数的(库),一种是没有导出函数的(exe)

 

先演示一下如何对没有导出函数的C++工程进行测试。

 

使用Visual Studio 2019 创建一个C++ 控制台程序(ConsoleApp),增加一个类math,如下:

math.h

复制代码
 1 #pragma once
 2 
 3 class math
 4 {
 5 public:
 6     math();
 7     ~math();
 8     int multiply(int x, int y);
 9     int sum(int x, int y);
10 };
复制代码

math.cpp

复制代码
 1 #include "math.h"
 2 math::math()
 3 {
 4 }
 5 
 6 math::~math()
 7 {
 8 }
 9 
10 int math::multiply(int x, int y)
11 {
12     return x * y;
13 }
14 
15 int math::sum(int x, int y)
16 {
17     return x + y;
18 }
复制代码

 

然后再创建一个C++的测试工程ConsoleAppTests

 

 

创建完成后,需要执行以下步骤

1.添加ConsoleApp项目引用 

 

2 将被测试的工程ConsoleApp链接进来。

打开属性->配置属性->链接器->输入->附加依赖项->$(SolutionDir)ConsoleApp\$(IntDir)*.obj

这个路径其实就是ConsoleApp的Debug目录,里面会有一些编译产生的文件,这里主要用到的就是obj文件。

 

3.添加头文件

我这里用的相对路径,也可以在属性->配置属性->VC++目录->包含目录这里,把ConsoleApp的目录包含进来,就可以直接使用头文件

1 #include "../ConsoleApp/math.h"

 

4. 编写测试代码

复制代码
 1 #include "pch.h"
 2 #include "CppUnitTest.h"
 3 #include "../ConsoleApp/math.h"
 4 
 5 using namespace Microsoft::VisualStudio::CppUnitTestFramework;
 6 
 7 namespace ConsoleAppTests
 8 {
 9     TEST_CLASS(ConsoleAppTests)
10     {
11     public:
12         
13         TEST_METHOD(TestMath)
14         {
15             math ma;
16             auto result = ma.sum(2, 2);
17 
18             Assert::IsTrue(result == 4);
19         }
20     };
21 }
复制代码

 

5.执行测试

可以通过菜单 测试->测试资源管理器打开测试资源管理器,然后执行测试或调试测试。

 

也可以点击测试函数上方的蓝色符号执行测试或调试

 

 

6. 查看测试结果 

执行测试后,可以通过测试资源管理器查看测试是否通过

 

 

下面演示一下如何对有导出函数的C++工程进行测试。

首先,我们创建一个动态链接库工程Dll

 

 

 

增加下面两个文件用于测试

math.h

1 #pragma once
2 
3 extern "C" __declspec(dllexport) int sum(int x, int y);

 

math.cpp

1 #include"pch.h"
2 #include"math.h"
3 
4 int sum(int x, int y)
5 {
6     return x + y;
7 }

 

创建测试工程的过程跟上面一样,就不重复演示了。主要就是第2步链接obj文件那里,这里换成生成的lib文件路径

$(SolutionDir)$(Configuration)\Dll.lib

 

 

测试代码:

复制代码
 1 #include "pch.h"
 2 #include "CppUnitTest.h"
 3 #include "../Dll/math.h"
 4 
 5 using namespace Microsoft::VisualStudio::CppUnitTestFramework;
 6 
 7 namespace DllTests
 8 {
 9     TEST_CLASS(DllTests)
10     {
11     public:
12         
13         TEST_METHOD(Math)
14         {
15             auto result = sum(2, 2);
16             Assert::IsTrue(result == 4);
17         }
18     };
19 }
复制代码

 

 

示例代码

 

 

推荐阅读:

Microsoft Test Framework所提供的全部接口

posted @   zhaotianff  阅读(1801)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示