主要介绍两种为VisualStudio的C++项目创建单元测试的方法: 微软的本机单元测试 、 Google Test 。
一、VisualStudio自带的本机单元测试
VisualStudio自带的有一个C++本机单元测试,其框架主要原理是生成一个动态库文件,测试的函数作为DLL的导出函数由框架进行调用测试。
然而实际使用下来体验并不是很好,不过还是简单说下怎么使用。
在解决方案下右键菜单-添加-新建项目,搜索C++项目里的“ 本机单元测试项目 ”
具体可以参考微软官方介绍: 编写适用于 C/C++ 的单元测试 - Visual Studio Microsoft Docs
测试发现对于简单的demo小程序没有什么问题,但是对于半路接入单元测试的复杂点的项目就暴露了各种问题(当然最好在项目最初就接入单元测试)。
另外实测发现: 测试项目必须引入带测试项目的lib和.obj ,某些博客说不用链接,实测不行。
为DLL项目创建单元测试
还是参考微软官方介绍: 编写 C++ DLL 单元测试 - Visual Studio | Microsoft Docs
单元测试必须调用不导出的非成员函数,并且代码必须生成为动态链接库 (DLL): 在同一项目中添加单元测试作为产品代码。 转到过程在同一项目中添加单元测试的具体步骤。
这个看上去挺适合自己目前的项目的,然而接入下来并不理想,问题后面一并总结。
主要问题
- 配置繁琐
-
好不容易配置成功,测试出现问题,其中无法执行测试是最常见的:
Failed to set up the execution context to run the test.参考网上的介绍说是,测试DLL所依赖的项目或三方DLL缺失,使用depends查看依赖关系 配置完全后仍然无法运行(测试demo可以,复杂点项目不行)。放弃。
二、使用Google Test
使用下来发现Google Test要简单的多,可以参考微软官方文档: 如何使用适用于 C++ 的 Google Test - Visual Studio Microsoft Docs
这里说下需要注意的地方,因为C++项目一般使用静态链接库的方式,所以在创建Google Test项目的时候,选项需要注意。
- 将Google Test用作 ,选择默认的“ 静态库(.lib) ”即可;
- C++运行时库选择 :静态链接(也就是MT/MTd),否则就选择:动态链接(推荐)(也就是MD/MDd)。
- 选择要测试的项目(可选) :这个勾选要测试的项目名,也可以不选。
在测试项目的属性-链接器-输入-附加依赖项里,配置: ..\temp\XXXX\Win32\Debug*.obj 在测试项目的属性-链接器-常规-附加库目录,配置需要链接的三方lib的目录,这个是和被测试项目的配置一致。
编写测试代码:
#include "pch.h"
#include "../XXXX/XXX.h" // 被测试项目的代码
TEST(TestCaseName, TestName) {
EXPECT_EQ(1, 1);
EXPECT_TRUE(true);
// 使用被测试项目的代码
ASSERT_STREQ(_T("xxx.xxx"), _T("xxx.xxx"));