首页 > 其他分享 >【gtest】Visual Studio 2019 单元测试学习Google Test

【gtest】Visual Studio 2019 单元测试学习Google Test

时间:2023-06-16 15:45:38浏览次数:47  
标签:std Google Work 单元测试 char Visual EXPECT include

前言

记录在VS2019中使用自带的Google Test进行单元测试的方法和经验

项目介绍

总共2个项目,Work为项目工程,TestWorkWork工程的单元测试工程,TestWork依赖于Work工程,但是Work不依赖TestWorkTestWorkWork的旁路辅助工程,用于对代码的检查和测试。

创建项目

  • 创建C++的常规Work工程
  • 新增创建Google Test的单元测试工程


    创建完项目后,工程项目情况如下(可将TestWork设置为启动项目,右键TestWork->Set as Startup Project):

编写项目代码

准备测试类和常规函数

【工作项目】点击查看代码
/*** test.h文件内容 ***/
#pragma once
#include <string>
#include <windows.h>
#include <chrono>

int Snprintf(char* pBuf, int nBuf, const char* pFormat, ...);
std::string GbkToUtf8(const char* pSrc, int nLen);
std::string Utf8ToGbk(const char* pSrc, int nLen);
std::string GetFileText(const char* file);
void WriteFile(const char* file, const char* dat, size_t len);

/// <summary>
/// 时间差
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
std::chrono::microseconds ClockSpan(std::chrono::steady_clock::time_point start, std::chrono::steady_clock::time_point end);
/// <summary>
/// 当前时间
/// </summary>
/// <returns></returns>
std::chrono::steady_clock::time_point GetNowClock();

/** utils.h文件内容 ***/
#pragma once
class utils
{
public:
    int     Add(int a, int b);
    bool    IsEmpty(const char* s);
};

单元测试项目设置

因为单元测试是辅助类项目,原Work不依赖于单元测试项目,因此单元测试项目必须是无侵入式引用Work项目,方式如下:

  • 源代码引用,包括头文件,如:
#include "pch.h"
#include "..\text.h"
#include "..\utils.h"

也可通过设置【配置属性 - C/C++ - 常规 - 附加包含目录】配置项目目录,便于包含头文件

  • 链接库引用,因原项目不一定式静态库,因此仅包含头文件时会在链接时找不到引用的函数符号,因此对于需要引用的函数,需要链接其定义的obj文件,TestWork项目【属性-链接器-输入-附加依赖项】,如:

编写单元测试代码

#include "pch.h"
#include "..\text.h"
#include "..\utils.h"

TEST(TestCaseName, TestName) {
      EXPECT_EQ(1, 1);
      EXPECT_TRUE(true);
}

TEST(Work, WorkUtil)
{
    utils us;

    EXPECT_TRUE(us.IsEmpty(NULL));
    EXPECT_TRUE(us.IsEmpty(""));
    EXPECT_TRUE(!us.IsEmpty(" "));

    EXPECT_EQ(1, us.Add(1, 0));
    EXPECT_EQ(2, us.Add(3, -1));
}

TEST(Work, WorkText)
{
    char buf[256];
    Snprintf(buf, sizeof(buf), "您好,China %d!", 2023);
    EXPECT_EQ(0, strcmp(buf, "您好,China 2023!"));

    std::string s;
    std::string strGbk = "中国·西藏●默罕默德③代";
    std::string strUtf8 = GbkToUtf8(strGbk.c_str(), strGbk.size());
    EXPECT_EQ(0, strGbk.compare(Utf8ToGbk(strUtf8.c_str(), strUtf8.size())));

    auto tNow = GetNowClock();
    Sleep(100);
    auto tNow100 = GetNowClock();
    EXPECT_EQ(ClockSpan(tNow, tNow100).count(), 100);
}

执行结果:

Running main() from c:\a\_work\32\s\thirdparty\googletest\googletest\src\gtest_main.cc
[==========] Running 3 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 1 test from TestCaseName
[ RUN      ] TestCaseName.TestName
[       OK ] TestCaseName.TestName (0 ms)
[----------] 1 test from TestCaseName (0 ms total)

[----------] 2 tests from Work
[ RUN      ] Work.WorkUtil
[       OK ] Work.WorkUtil (1 ms)
[ RUN      ] Work.WorkText
[       OK ] Work.WorkText (101 ms)
[----------] 2 tests from Work (103 ms total)

[----------] Global test environment tear-down
[==========] 3 tests from 2 test cases ran. (106 ms total)
[  PASSED  ] 3 tests.

标签:std,Google,Work,单元测试,char,Visual,EXPECT,include
From: https://www.cnblogs.com/arbboter/p/17485443.html

相关文章

  • iOS 单元测试之常用框架 OCMock 详解
    一、单元测试1.1单元测试的必要性测试驱动开发并不是一个很新鲜的概念了。在日常开发中,很多时候需要测试,但是这种输出是必须在点击一系列按钮之后才能在屏幕上显示出来的东西。测试的时候,往往是用模拟器一次一次的从头开始启动app,然后定位到自己所在模块的程序,做一系列的点击......
  • Google Test(GTest)和Google Mock(GMock)入门简介
    GoogleTest1.自定义错误输出:ASSERT_EQ(x.size(),y.size())<<"Vectorsxandyareofunequallength";for(inti=0;i<x.size();++i){EXPECT_EQ(x[i],y[i])<<"Vectorsxandydifferatindex"<<i;}2.ASSERT_......
  • 百度谷歌一起搜 - 百Google度 - Chrome插件2
    百度谷歌一起搜,我见过最好用的Chrome搜索插件。特此隆重推荐~ 谷歌百度一键搜索在Baidu里面搜Google,在Google里面搜百度!不用切换,松松搞定~~有图有真相:插件安装地址:http://t.cn/zWUv7wX插件安装地址:http://t.cn/zWUv7wX源码地址:https://github.com/raywill/BaiGoogleDu......
  • 百度谷歌一起搜 - 百Google度 - Chrome插件
    百度谷歌一起搜,我见过最好用的Chrome搜索插件。特此隆重推荐~ 谷歌百度一键搜索在Baidu里面搜Google,在Google里面搜百度!不用切换,松松搞定~~有图有真相:插件安装地址:http://t.cn/zWUv7wX插件安装地址:http://t.cn/zWUv7wX源码地址:https://github.com/raywill/BaiGoogleDu......
  • Mac的IDEA配置Junit单元测试
    Junit使用步骤1.定义一个测试类(测试用例)规范建议:测试类命名:功能名称或者类名+Test包命名:xxx.xxx.xxx.test2.定义测试方法规范建议:方法名:test+被测试的方法名返回值:void参数列表:空参3.给方法加上注解@Test4.添加Junit的依赖环境添加Junit依赖环境前,输入@Test......
  • 新的Google Lyra音频编解码器对实时视频流意味着什么?
    正文字数:2602 阅读时长:4分钟通过语言编码中的码率缩减趋势,Lyra与Opus中的区别比较,Lyra的作用,XDN平台上的高效语音编码技术几个方面探讨新的GoogleLyra音频编解码器对实时视频流的意义。文/ RED5PRO https://www.red5pro.com/blog/what-does-the-new-google-lyra-audio-codec-......
  • Visual Studio Feature: .http Files
    ExploringtheNewVisualStudioFeature:.httpFiles#visualstudio#csharp#dotnet#abotwrotethisIntroduction:VisualStudio,thepopularintegrateddevelopmentenvironment(IDE)byMicrosoft,continuallyevolvestoenhancedevelopers'productivity......
  • 最新jQuery引用google地址外部文件(jquery 1.2.6至jquery1.7.2)
    评:1.很多网站都是使用这种方式引入,客户的浏览器可能已经缓存过了jquery。可以直接调用本地的,速度更快…2.Googlecode使用了cdn技术在很多地方有节点服务器,加载jquery时绝对不会比在你服务器上加载慢,本地服务器除外:)3.可以节省服务器流量,降低服务器带宽压力可以使用......
  • Visualvm使用
    1.安装只要安装JDK即可,运行jvisualvm.exe,选择【工具】——【插件】——【可用插件】  ·2使用2.1.远程机器设置要从远程应用程序中检索数据,需要在远程JVM上运行jstatd实用程序。即要进行以下操作:1)在jdk安装目录的bin目录下新建文件jstatd.all.policy,文件内容为:g......
  • Jpro Toolbar Perform a Comprehensive Electronic Inspection With Visual PM Inspec
    JPROhelpsperformacomprehensiveelectronicinspectionofthetruck,butit’simportanttopairthiswithavisualPMinspection.UsingchecklistsandtoolsinJPRO,youcanensuretrucksreceivethemostcomprehensiveassessmentswithreportsthatfaci......