[C++] 基础教程 - 如何使用google test进行单元测试

这篇具有很好参考价值的文章主要介绍了[C++] 基础教程 - 如何使用google test进行单元测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文涉及的项目源代码

https://download.csdn.net/download/u011775793/88601877

什么是单元测试?

单元测试是一种软件测试方法,用于测试代码中的最小可测试单元。在软件开发中,我们通常将代码分解为多个模块或类,每个模块或类都有自己的功能和行为。单元测试的目的是确保每个模块或类都能正常工作,不会影响其他模块或类的功能。

什么是google test?

gtest是Google开发的C++单元测试框架,它基于C++标准库,提供了丰富的测试功能和易于使用的API。gtest可以自动发现测试用例,支持多种测试模式和断言,可以帮助我们更轻松地进行单元测试。

GitHub - google/googletest: GoogleTest - Google Testing and Mocking Framework

gtest支持的特性

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

google/googletest: GoogleTest - Google Testing and Mocking Framework (github.com)

C++ Support

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

oss-policies-info/foundational-cxx-support-matrix.md at main · google/oss-policies-info (github.com)

 用户使用手册

GoogleTest User’s Guide | GoogleTest

gtest安装

Ubuntu

gtest已经包含在Google Test的发布包中,可以直接下载并使用。如果你使用的是Linux系统,可以通过以下命令安装:

sudo apt-get install libgtest-dev

Window

如果你使用的是Windows系统,可以从gtest官网下载源代码,然后CMake+MSVC构建和安装gtest。

源代码下载

https://github.com/google/googletest/releases/ 下载最新版本源代码。

https://github.com/google/googletest/releases/[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

使用CMake进行编译和安装

解压源代码到 “D:\cxx_3_parties\googletest-1.14.0”,通过cmake-gui来进行设置和生成vs 2022解决方案:

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

点击“Finish”

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

CMake参数说明

build_shared_lib:

默认情况下,gtest的构建方式为静态库,这意味着gtest的代码会被编译成一个独立的静态库文件,并被链接到程序中。这种方式的优点是不需要额外的运行时库支持,但是会增加程序的大小和复杂度。

使用build_shared_lib参数可以将gtest的构建方式改为共享库,这意味着gtest的代码会被编译成一个动态链接库文件,而不是静态库文件。使用共享库的好处是可以减少程序的大小和复杂度,同时还可以提高程序的可移植性。

需要注意的是,使用build_shared_lib参数可能会影响程序的性能和可移植性,因此应该根据实际情况进行选择。如果程序需要在多个平台上运行,并且对性能有较高的要求,那么最好不要使用该参数。

gtest_force_shared_crt:

在gtest中,gtest_force_shared_crt是一个CMake参数,它的作用是强制将gtest的共享库与静态库链接到同一个运行时库中。

默认情况下,gtest的静态库和动态库会被分别链接到不同的运行时库中,这可能会导致一些问题,例如在Windows平台上会出现“无法加载动态库”的错误。

使用gtest_force_shared_crt参数可以解决这个问题,它会强制将gtest的共享库与静态库链接到同一个运行时库中,从而避免了上述问题。

需要注意的是,使用gtest_force_shared_crt参数可能会影响程序的性能和可移植性,因此应该根据实际情况进行选择。如果程序需要在多个平台上运行,并且对性能有较高的要求,那么最好不要使用该参数。

这里我们只需要修改“CMAKE_INSTALL_PREFIX”到“D:\CXXDeps\googletest”(注意:路径中不能包括空格,如果有空格会导致库安装失败,如果非要用有空格的目录,可以尝试在路径中添加"",比如"D:\CXXDeps\googletest")其他的保持使用默认设置即可,点击“Generate”生成vs 2022解决方案:

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

点击“Open Project”打开解决方案:

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

通过“生成->批生成...”同时构建Release版本和Debug版本:

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

构建成功:

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

在“D:\CXXDeps\googletest”将会生成对应的头文件和库目录: 

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++ [C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

如何使用 gtest 对c++ 项目进行单元测试?

CMake项目

Quickstart: Building with CMake | GoogleTest

创建项目目录,通过控制台进入该目录

创建目录“D:\my_tutorials\SourceCode\gtest_lessions”。

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

在项目目录中创建“CMakeLists.txt”文件

CMakeLists.txt:

cmake_minimum_required(VERSION 3.14)
project(gtest_lession)

# GoogleTest requires at least C++14
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include(FetchContent)
FetchContent_Declare(
  googletest
  URL https://codeload.github.com/google/googletest/zip/refs/tags/v1.14.0
)
# For Windows: Prevent overriding the parent project's compiler/linker settings
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)

以下是代码的解释:

  1. cmake_minimum_required(VERSION 3.14):指定项目所需的最低CMake版本为3.14。
  2. project(gtest_lession):定义项目的名称为gtest_lession。
  3. set(CMAKE_CXX_STANDARD 14):设置C++标准为C++14。
  4. set(CMAKE_CXX_STANDARD_REQUIRED ON):要求编译器支持至少C++14标准。
  5. include(FetchContent):包含FetchContent模块,用于从GitHub下载依赖库。
  6. FetchContent_Declare(googletest URL https://codeload.github.com/google/googletest/zip/refs/tags/v1.14.0):声明要下载的依赖库googletest,并提供其下载链接。
  7. set(gtest_force_shared_crt ON CACHE BOOL "" FORCE):对于Windows系统,防止覆盖父项目(可能是另一个CMake项目)的编译器和链接器设置。
  8. FetchContent_MakeAvailable(googletest):下载并将googletest库安装到本地。

备注:这里使用的是1.14版本,如果需要依赖其他版本,修改到对应的github URL就好。

在项目目录中创建一个测试文件“hello_test.cc”

hello_test.cc:

#include <gtest/gtest.h>

// Demonstrate some basic assertions.
TEST(HelloTest, BasicAssertions) {
  // Expect two strings not to be equal.
  EXPECT_STRNE("hello", "world");
  // Expect equality.
  EXPECT_EQ(7 * 6, 42);
}

配置和构建使用Google Test框架的测试项目

cmake_minimum_required(VERSION 3.14)
project(gtest_lession)

# GoogleTest requires at least C++14
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include(FetchContent)
FetchContent_Declare(
  googletest
  URL https://codeload.github.com/google/googletest/zip/refs/tags/v1.14.0
)
# For Windows: Prevent overriding the parent project's compiler/linker settings
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)

enable_testing()

add_executable(
  hello_test
  hello_test.cc
)
target_link_libraries(
  hello_test
  GTest::gtest_main
)

include(GoogleTest)
gtest_discover_tests(hello_test)

新添加代码具体解释如下:

  1. enable_testing():启用测试功能,允许在构建过程中生成测试文件。
  2. add_executable(hello_test hello_test.cc):定义一个名为hello_test的可执行文件,它依赖于hello_test.cc源文件。
  3. target_link_libraries(hello_test GTest::gtest_main):将Google Test库(GTest)的gtest_main目标链接到hello_test可执行文件,以便在运行测试时使用。
  4. include(GoogleTest):包含Google Test框架的头文件,以便在CMakeLists.txt中使用Google Test相关的命令。
  5. gtest_discover_tests(hello_test):自动发现并编译hello_test目录下的所有测试用例,并将它们链接到hello_test可执行文件。

构建和运行测试

配置项目
cmake -S . -B build

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

 构建项目
cmake --build build

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

运行测试 
# Windows
cd build
ctest
# Linux
cd build && ctest

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

VC++项目

使用VS 2022 创建一个名为“GTestDemo”的项目

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

创建名为“main.cpp”的文件

main.cpp:

#include<gtest/gtest.h>
int add(int a, int b) {
	return a + b;
}
int sub(int a, int b) {
	return a - b;
}
TEST(testCase, test0) {
	EXPECT_EQ(add(2, 3), 5);
	EXPECT_EQ(sub(5, 3), 2);
}
int main(int argc, char **argv) {
	testing::InitGoogleTest(&argc, argv);
	return RUN_ALL_TESTS();
}

给项目添加包含目录

“VC++目录->包含目录”,添加头文件路径“D:\CXXDeps\googletest\include”。

这里添加的头文件路径为前面 “使用CMake进行编译和安装”中的生成的头文件目录:

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

给项目添加库文件

“链接库->输入->附加依赖项”,添加“D:\CXXDeps\googletest\lib\gtest.lib”库文件。

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

运行项目

修改完成,点击“确定”保存新设置,使用“Debug”模式来运行项目,结果抛出以下错误:

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++ 原因是没有更改运行库所导致。

重新打开项目属性页,通过“C/C++->代码生成”查看当前使用的运行库,默认是“多线程调试 DLL (/MDd)”,需要修改为“多线程 DLL (/MD)”:

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

点击“确定”保存,重新运行程序:

[C++] 基础教程 - 如何使用google test进行单元测试,C++,单元测试,c++

总结

本文介绍了google test c++ 测试框架,包括如何在windows中从源代码构建和安装gtest,以及如何在VC++项目和CMake项目使用gtest对c++功能代码进行单元测试。附件中包含了使用vs 2022构建的gtest的v1.14安装库,以及本文涉及的CMake项目和VC++项目。文章来源地址https://www.toymoban.com/news/detail-766956.html

到了这里,关于[C++] 基础教程 - 如何使用google test进行单元测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Test中使用MockMvc进行上传文件单元测试时,报NullPointerException

    问题 : MockMvc peform在集成测试中返回nullPointerException 原因 : springboot-2.x版本以上,当你添加依赖spring_boot_starter_test后,可以在内部看到自带了jupiter测试核心模块,也就是 junit5,junit5(jupiter测试引擎)不再支持junit4(vintage测试引擎),在使用时自然不再需要spring来提供了,

    2024年02月14日
    浏览(45)
  • 记录使用vue-test-utils + jest 在uniapp中进行单元测试

    uniapp推荐了测试方案 @dcloudio/uni-automator ,属于自动化测试,api提供的示例偏重于渲染组件,判断当前渲染的组件是否和预期一致 vue推荐的测试方案 vue test utils ,属于单元测试,可以搭配jest、mocha等单测运行器 我选了方案2🕶️ 关于vue的组件测试,vue官方提到: 你的 Vue 应用

    2024年02月06日
    浏览(46)
  • 利用Simulink Test进行模型单元测试 - 1

    随手搭建了一个demo模型MilTestModel,模型中不带参数 1.模型空白处右击 测试框架 为‘MilTestModel’创建 菜单 2.在创建测试框架对话框中,点击OK,对应的测试框架MilTestMode_Harness1就自动打开了 1.在HARNESS标签下点击 Simulik Test Manager 2.在Simulink Test Manager中,点击New TestFile打开保存文

    2024年02月13日
    浏览(33)
  • SpringBoot 如何使用 Spring Test 进行集成测试

    在开发过程中,单元测试是不可或缺的,它可以帮助我们及时发现代码的问题并进行修复,从而提高代码的质量和可维护性。但是,单元测试只能测试单个方法或类的功能,无法测试多个模块之间的交互和整个应用程序的功能。因此,为了确保应用程序的正确性和健壮性,我

    2024年02月10日
    浏览(48)
  • C# 中的单元测试,如何使用单元测试进行程序测试和调试?

    单元测试是一种软件测试方法,用于测试单个功能或方法是否按预期工作。在 C# 中,可以使用 .NET 框架中的单元测试工具来编写和运行单元测试。 下面是使用 Visual Studio 内置的单元测试框架来创建一个简单的单元测试的步骤: 在 Visual Studio 中创建一个新的类库项目。 在新项

    2024年02月15日
    浏览(63)
  • 如何使用Jest进行单元测试

    Jest 是一种流行的 JavaScript 测试框架,它具有易用性和高效性。Jest 支持测试各种 JavaScript 应用程序,包括 React、Vue、Node.js 等。在本文中,我们将介绍如何使用 Jest 进行单元测试。 ## 1. 安装 Jest 首先,我们需要在项目中安装 Jest。可以使用 npm 或 yarn 安装 Jest: ``` npm install

    2024年02月10日
    浏览(39)
  • 如何使用PowerMock进行单元测试

    原博文:如何使用PowerMock进行单元测试 (techdatafuture.com) 持续更新 PowerMock是一个用于增强JUnit和TestNG的单元测试框架,它允许开发者在单元测试中模拟和修改代码中的静态方法、私有方法和构造函数。PowerMock基于Mockito和EasyMock,为Java开发者提供了一种更灵活、强大的测试工具

    2024年02月16日
    浏览(47)
  • 如何使用CMake的CTest进行单元测试

    如何使用CMake和CTest进行单元测试。 CMake是一个跨平台的构建工具,可以自动生成与平台相关的Makefile或Visual Studio项目文件,简化了C++程序的构建过程。而CTest是CMake的测试工具,它可以自动化运行单元测试,收集测试结果并生成报告。 下面是使用CMake和CTest进行单元测试的步骤

    2024年02月13日
    浏览(36)
  • IDEA中 单元测试@Test的使用

    首先我在自己的module-zzz中有hamcrest-core-1.3.jar 和 Junit-4.12.jar两个包 ,并且可以正常使用test测试方法。要想在另外一个module-chapter01中正常使用test,则可以进行如下操作:第一步:File -- Project Structure -- Modules–Dependencies 第二步:点击右上角的+  第三步:点击JARs or directories…

    2024年02月07日
    浏览(49)
  • java常见面试题:如何使用Java进行单元测试?

    单元测试是软件开发中的一个重要环节,它确保每个单独的代码单元都能按照预期工作。以下是如何使用Java进行单元测试的详细说明: JUnit : JUnit是Java中最流行的单元测试框架。 首先,添加JUnit依赖到你的项目中。如果你使用Maven,可以在 pom.xml 中添加以下依赖: 复制代码

    2024年02月02日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包