美文网首页
使用GoogleTest测试C++代码

使用GoogleTest测试C++代码

作者: 老杜振熙 | 来源:发表于2021-06-13 18:16 被阅读0次

术语

  • test suite:应该就是指整个测试的名称和意义
  • test:整个测试下某一类的测试
  • 所以test suite是一个整体,下面会有不同的test,不同的test都属于这个test suite。单个test下可以包含多个测试用例
  • test case:废弃术语

使用流程

  • 编写断言(assertion),检查环境是否有效;
  • 断言包含TEST()TEST_F()两种大类型,分别对应简单的测试,以及针对固定class的测试夹具;

断言

  • ASSERT_*类的断言只生成FATAL类型的错误,并立即终止程序;
  • EXPECT_*类的断言还会生成NONFATAL类型的错误,不会立即终止程序;
  • 上述两种类型的断言如何选择?关键就在于:选择EXPECT_*,那么你想要的是,出现错误时,想要程序继续运行,去观察更多的错误现象以及输出;而选择ASSERT_*就意味着,如果出现了错误,那么后续的程序运行也就没有意义了;

cmake

使用cmake构建用googletest进行测试的测试工程,大概有两种方式:FetchContent()find_package()。本节中我们假设已经有了一个项目,内容就是堆排序,现在需要使用googletest来进行测试。如下列出了这两种方式。

  1. FetchContent

FetchContent在cmake中的作用大概就和submodule在git中的地位差不多,先直接给出例子:

cmake_minimum_required(VERSION 3.18)

project(heapSortTest)

set(CMAKE_CXX_STANDARD 11)

include(FetchContent)
FetchContent_Declare( ### 声明这个第三方项目需要如何获取
    googletest
    GIT_REPOSITORY https://github.com/google/googletest/
    )
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) ### linux系统就不用关心这句话了
FetchContent_MakeAvailable(googletest) ### 开始获取这个项目(网络不好的话建议把github的项目导入到gitee中进行获取)

enable_testing()

add_executable(hsTest
    Solution.hpp
    Solution.cpp ### 堆排序的核心源码
    SolutionTest.cpp ### 测试代码,使用TEST_F
    )

target_link_libraries(hsTest
    gtest_main
    )

include(GoogleTest)
gtest_discover_tests(hsTest)

FetchContent适用于第三方模块没有安装在本地的时候。

  1. find_package

find_package和意思就是在本地系统上找到我们所需的第三方模块,并将其中我们需要的一些target链接到自己的target之中。如果googletest进行的是默认安装的话,应该就会将头文件和库文件分别装在/usr/local/include/usr/local/lib之中,如图:

头文件
库文件
find_packge会找到所需的第三方模块,随后我们也就可以使用需要的target,代码如下。那么这里有一个问题,如果不使用find_package会怎么样呢?答案是:我们想要的target就找不到了,以下面的代码为例${GTEST_BOTH_LIBRARIES}显然就变为空;而对于上面FetchContent的代码为例,gtest_main这个target显然也就找不到了,也为空
cmake_minimum_required(VERSION 3.18)

project(heapSortTest)

set(CMAKE_CXX_STANDARD 11)

find_package(GTest)
if(NOT GTest_FOUND)
    message("gtest package NOT FOUND")
else()
    message("gtest FOUND")
    message("gtest path: ${GTEST_INCLUDE_DIRS}")
endif()
enable_testing()

add_executable(hsTest
    Solution.hpp
    Solution.cpp
    SolutionTest.cpp
    )

target_link_libraries(hsTest
    ${GTEST_BOTH_LIBRARIES}
    pthread
    )

include(GoogleTest)
gtest_discover_tests(hsTest)

相关文章

网友评论

      本文标题:使用GoogleTest测试C++代码

      本文链接:https://www.haomeiwen.com/subject/yeqgeltx.html