GoogleTest编写 C/C++ 单元测试
前言
C++项目中准备添加单元测试。因为我们用的IDE是Visual Studio。调查得知,Visual Studio本身就集成了几个 C++ 测试框架,无需进行额外下载。
- 适用于 C++ 的 Microsoft 单元测试框架
- Google Test
- Boost.Test
- CTest
首先测试了Microsoft 单元测试框架,用VS2017编译不过,据说是vs的Bug,在最新的版本已经修复。由于没有最新VS,后续就用GoogleTest去研究了。(其他俩个框架没有尝试,不再赘述)
错误 C1083 无法打开包括文件: “CppUnitTest.h”: No such file or
directory NativUnitTest d:\project\unittest\nativeunittest\nativeunittest.cpp 2
创建GoogleTest单元测试项目
用GoogleTest框架新建单元测试工程
操作:文件→新建→项目→Visual C++→测试→GooleTest
本例项目命名为GoogleTestProject
工程创建成功后,在测试资源管理器中点击全部运行(默认有生成测试实例),验证测试是否可行
测试资源管理器没有显示的话,在“测试”菜单上,选择“窗口” > “测试资源管理器”
创建待测dll项目
使用“Windows 桌面向导”创建 一个C++ 工程用于测试
操作:右键解决方案→添加→新建项目→Visual C++→Windows 桌面→Windows 桌面向导
本例项目命名为DynamicLinkLibrary。
上面画面点击“创建”。 在下一个对话框中,在“应用程序类型”下选择“动态链接库 (dll)”,同时选中“导出符号”。
“导出符号” 选项生成可用来声明导出方法的便利宏。
创建成功后,.h文件中声明要导出的函数,.cpp中定义要导出的函数
在单元测试工程中参照引用待测dll
在单元测试工程中参照引用待测dll,这样单元测试工程才能调用待测工程中的函数去做单元测试
操作:右键单击单元测试工程→添加→引用→选择待测工程
引用添加成功后,如下所示,在【引用】处可以看得到
最后,添加上述引用工程的.h
#include "pch.h"
#include "../DynamicLinkLibrary/DynamicLinkLibrary.h"
编写单元测试代码并运行
编写测试用例
TEST(TestCaseName1, TestName1) {
CDynamicLinkLibrary DyLinkLibrary;
EXPECT_EQ(1, DyLinkLibrary.Sum(0, 1));
}
TEST(TestCaseName1, TestName2) {
CDynamicLinkLibrary DyLinkLibrary;
EXPECT_EQ(1, DyLinkLibrary.Sum(0, 1));
}
TEST(TestCaseName2, TestName1) {
CDynamicLinkLibrary DyLinkLibrary;
EXPECT_EQ(1, DyLinkLibrary.Sum(0, 1));
}
生成解决方案,新测试用例出现在【测试资源管理器】中。在【测试资源管理器】中,选择【全部运行】。
问题Debug
当某个测试项不通过时,可以调试出问题的测试用例。
操作:右键单击要调试的测试用例→调试所选测试