首页 > 其他分享 >使用GoogleTest框架进行cpp代码的基本单元测试

使用GoogleTest框架进行cpp代码的基本单元测试

时间:2023-10-11 19:44:06浏览次数:45  
标签:FactorialTest 单元测试 test GoogleTest googletest cpp main 源码

title: 
aliases: 
tags:
  - cpp/单元测试
  - cmake
  - 工程技术
category:
  - 方法
stars: 
url: 
creation-time: 2023-10-11 19:02
modification-time:

这里主要介绍从 0 开始实现基本的单元测试功能。

构建

首先从 googletest 代码仓下载源码。

网上很多指导包括官方的指南中的方法都是在构建的时候让 [[cmake]] 去帮忙拉取源码,这种方式可能对于国内的网络环境不是很友好,所以我选择的是自己把源码下载下来,放到项目的相关目录中。

然后在项目的 CMakeList.txt 中导入 googletest 的源码。
官方的指南里面,使用了 PkgConfig 工具。[1]但是我按照指南里的方式一直找不到相关的 .pc 文件。所以我自己是采取了另外一种方式。
googletest 的源码中有自己的 CMakeList.txt ,所以在项目的 CMakeList.txt 中直接用 add_subdirectory 命令将其添加进去即可。

add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/googletest/"
                 "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/googletest/build")
set(SOURCES unit_test.cc )
add_executable(unittest ${SOURCES})
target_link_libraries(unittest GTest::gtest_main)

基本的单元测试

最简单的单元测试例子如下所示,其中由于我们使用的是 gtest_main 模块,就不用再自己写 main 函数(由 googletest 完成)。

#include <gtest/gtest.h>

int factorial(int n) {
  int result = 1;
  for (int i = 1; i <= n; i++) {
    result *= i;
  }
  return result;
}

TEST(FactorialTest, Negative) {
  EXPECT_EQ(1, factorial(-5));
  EXPECT_EQ(1, factorial(-1));
  EXPECT_GT(factorial(-10), 0);
}

运行效果:

Running main() from D:\Project\manual_control\3rdparty\googletest\googletest\src\gtest_main.cc
[==========] Running 1 tests from 1 test suites.
[----------] Global test environment set-up.

[----------] 1 test from FactorialTest
[ RUN      ] FactorialTest.Negative
[       OK ] FactorialTest.Negative (0 ms)
[----------] 1 test from FactorialTest (2 ms total)

[----------] Global test environment tear-down
[==========] 1 tests from 1 test suites ran. (16 ms total)
[  PASSED  ] 1 tests.

Reference


  1. Using GoogleTest from various build systems | GoogleTest ↩︎

标签:FactorialTest,单元测试,test,GoogleTest,googletest,cpp,main,源码
From: https://www.cnblogs.com/pomolnc/p/17758010.html

相关文章

  • LLM采样后处理总结:LLM的后处理的cpp实现
    LLM采样后处理总结:LLM的后处理的cpp实现在经过LLM的lm_head之后,会得到[batch,vocab_size]大小的矩阵向量,此时需要对输出的逻辑张量进行采样,除了beam_search的贪心策略,还有repetition_penalty、temperature、top_k、top_p等几种控制采样的方法。repetition_penaltyrepetition_p......
  • src/param.cpp:30:26: fatal error: gsl/gsl_blas.h: No such file or directory
     001、问题:安装gemma软件报错src/param.cpp:30:26:fatalerror:gsl/gsl_blas.h:Nosuchfileordirectory 002、解决方法,安装glsa、官网下载http://mirrors.ustc.edu.cn/gnu/gsl/ b、wgethttp://mirrors.ustc.edu.cn/gnu/gsl/gsl-2.7.tar.gztar-xzfgsl-2.7......
  • 【Cpp】RTTI 机制原理解析
    ReferencesBaiduWikiC++中的RTTI机制详解RTTI推荐阅读:RTTI原理推荐阅读:C++中的RTTI机制什么是RTTI机制?RTTI是“RuntimeTypeInformation”的缩写,意思是:运行时类型信息。它提供了运行时确定对象类型的方法。RTTI通过运行时类型信息程序能够使用基类的指针或引用......
  • NetCore学习笔记:单元测试和集成测试
    前言#我在使用AspNetCore的这段时间内,看了很多开源项目和博客,发现各种.Net体系的新技术很多人都有关注和使用,但却很少有人关注测试。测试是软件生命周期中的一个非常重要的阶段,对于保证软件的可靠性具有极其重要的意义。在应用程序的开发过程中,为了确保它的功能与预期一致,......
  • Windows桌面应用程序源文件.cpp注释
     这个是visualstudio2022上利用Windows桌面应用程序模板创建的源文件注释一个Windows图形界面(GUI)应用程序通常由主窗体,对话框,控件组成。当应用程序创建一个窗体,需要调用CreateWindowEx函数,必须提供的参数1.窗体类窗体类是一个结构体。是一系列属性的集合,用来描述窗体的行为......
  • MaSuRCA 软件安装 swig/perl5/swig_wrap.cpp:342:20: fatal error: string.h: No such
     001、问题MaSuRCA软件安装swig/perl5/swig_wrap.cpp:342:20:fatalerror:string.h:Nosuchfileordirectory  002、原因,当前环境处于conda的base环境,可能是函数库调用混乱。  003、解决方法,推出conda基础环境安装(base)[b20223040323@admin1MaSuRCA-4......
  • C和CPP程序是如何运行起来的?
    C和CPP程序是如何运行起来的?个人见解,谨慎阅读。如有错误,欢迎指正!代码均在Linux下编译运行。1.C语言程序从源码到可执行文件的过程C语言程序从源码到可执行文件的过程主要分为以下几个步骤:预处理、编译、汇编、链接。flowchartLRA1[代码]--"预处理"-->B1[预处理文......
  • [CPP] CPP的编译链接过程
    手写的源代码本质上只是一串文本,但是在编译器里点一下编译就可以直接看到程序的输出,从文本到执行输出之间发生了什么 源代码到可执行程序大致经历以下几个过程         1、预编译(Preprocessing)预编译阶段主要做四件事:头文件展开,宏替换,执行预编译......
  • cpp: read .dat file
     ///<summary>///打开DAT文件///</summary>voidoperatefile(){ chardata[100]; constchar*fname="afile.dat"; //打开文件. ofstreamoutfile; outfile.open(fname,ios::in); if(!outfile) { cout<<"文件不存在!"<......
  • cpp: Sorting Algorithms
     /*****************************************************************//***\fileSortingAlgorithms.h*\brief排序*\IDEvs2022C++20*\authorgeovindu*\dateSeptember282023********************************************************......