在Visual Studio中使用Google Test 测试c++代码
在Visual Studio 2017和更高版本中,Google Test已作为C ++桌面开发工作负载的默认组件集成到Visual Studio IDE中。要验证它是否已安装在您的计算机上,请打开Visual Studio安装程序,并在工作负载组件列表下找到Google Test:这里我使用的vs2019,win10系统。
在Visual Studio 2019中添加Google测试项目
在解决方案资源管理器中,右键单击解决方案节点,然后选择“添加”>“新建项目”。
将语言设置为C ++,然后在搜索框中键入test。 从结果列表中,选择Google Test Project。
为测试项目命名,然后单击“确定”。
配置测试项目
在出现的“测试项目配置”对话框中,您可以选择要测试的项目。当您选择一个项目时,Visual Studio会将引用添加到所选项目。如果不选择任何项目,则需要手动添加对要测试的项目的引用。在静态和动态链接到Google Test二进制文件之间进行选择时,注意事项与任何C ++程序相同。
这里我选择了自己的项目First Project。
设置其他选项
在主菜单中,选择工具>选项> Google Test的测试适配器以设置其他选项。
添加包含指令
在您的测试.cpp文件中,添加所有需要的#include指令,以使程序的类型和功能对测试代码可见。通常,该程序在文件夹层次结构中为上一层。如果键入#include“ ../”,将出现IntelliSense窗口,使您可以选择头文件的完整路径。
为了避免在源文件的每个include语句中键入完整路径,可以在Project > Properties > C / C ++ > General > Additional Include Directories中添加所需的文件夹,如下图所示。
这样,就可以编写和运行Google测试了。
使用gtest进行测试
首先看一下gtest项目的结构:在新建gtest项目时,自动生成了pch.h和pch.cpp两个文件,如下图所示。这里对First Project项目下的a.h和a.cpp下的函数进行测试。
a.h中的函数为:判断两个字符串是不是兄弟字符串,即两个字符串只有顺序不一样,其他完全一样。
class brother { public: bool isBrotherStrs(string s1, string s2) { if (s1.size() != s2.size()) return false; unordered_map<char, int> map; for (int i = 0; i < s1.size(); i++) { map[s1[i]]++; } for (int j = 0; j < s2.size(); j++) { if (map.find(s2[j]) == map.end()) return false; else map[s2[j]]--; } for (int i = 0; i < s1.size(); i++) { if (map[s1[i]] != 0) return false; } return true; } };
测试代码如下:这里仅是测试其中的一种情况,并非全部测试用例。
#include <iostream> #include <string> #include "pch.h" //#include "../First Project/**.h" #include "../First Project/a.h" using namespace std; TEST(isBrotherStrs, case1) { brother a; bool res = a.isBrotherStrs("abc", "cba"); EXPECT_EQ(1, a.isBrotherStrs("abc", "cba")); EXPECT_TRUE(res); } //:: testing :: InitGoogleTest()函数解析Google测试标志的命令行, //并删除所有已识别的标志。 这允许用户通过各种标志控制测试程序的行为. // 在调用RUN_ALL_TESTS()之前必须调用此函数,否则标志将无法正确初始化。 int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
然后将getst的测试项目(Sample-Test1)设置为启动项目运行结果如下: