在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)设置为启动项目运行结果如下:

 

posted @ 2021-03-07 21:29  justloving  阅读(4282)  评论(0编辑  收藏  举报