IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> GoogleTest笔记 -> 正文阅读

[开发工具]GoogleTest笔记


官网:https://google.github.io/googletest/

Quickstart cmake: https://google.github.io/googletest/quickstart-cmake.html

推荐从primer文档开始:https://google.github.io/googletest/primer.html

Samples: https://google.github.io/googletest/samples.html

忍不住吐槽下,google test的文档不太给力。

基本概念

主要就是断言 assertions

两类断言:

  • ASSERT_* 遇到错误会停止;
  • EXPECT_* 遇到错误会继续;

VS+gtest

以官网sample1为例。

新建一个静态库项目,把sample1.h, sample1.cpp扔进去,编译生成sample1.lib.

不需要手动从github上下载gtest文件,新建Google Test工程时vs会自动把gtest库放在解决方案下的packages文件夹里。

选择要测试的项目sample1,vs会把它放到googletest工程的引用项里。
在这里插入图片描述

记着手动添加一下sample1项目的include目录。

在默认的test.cpp里加上sample1_unittest.cpp的代码,运行即可。

cmake+gtest

一般不会按照Quickstart那样用FetchContent_Declare把gtest源码down下来,而是提前下载下来。

在googletest目录下编译:

cmake -S . -B build
cd build && make && sudo make install

头文件安装到了/usr/local/include/gtest/

库文件在 /usr/local/lib/ 下, 它们分别是: libgtest.a 和 libgtest_main.a

然后以googletest提供的sample1为例。

直接编译,依赖库有libgtest_main.a和pthread:

g++ sample1_unittest.cc sample1.cc -lgtest -lgtest_main -lpthread -o sample1_unittest

执行sample1_unittest就可以了。

或者在sample1_unittest.cc里加上gtest_main.cc提供的main:

// Step 3. Call RUN_ALL_TESTS() in main().
//
// We do this by linking in src/gtest_main.cc file, which consists of
// a main() function which calls RUN_ALL_TESTS() for us.
//
// This runs all the tests you've defined, prints the result, and
// returns 0 if successful, or 1 otherwise.
//
// Did you notice that we didn't register the tests?  The
// RUN_ALL_TESTS() macro magically knows about all the tests we
// defined.  Isn't this convenient?
GTEST_API_ int main(int argc, char **argv) {
  printf("Running main() from %s\n", __FILE__);
  testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

如果调用了main,就不需要链接gtest_main了:

g++ sample1_unittest.cc sample1.cc -lgtest -lpthread -o sample1_unittest

但如果工程再大一些,用上了cmake,那就需要根据目录好好谢谢cmakelists了。

以下是我的目录树:

$ tree samples
samples
├── build
├── CMakeLists.txt
├── include
│   └── sample1.h
├── main.cc
└── src
    └── sample1
        ├── CMakeLists.txt
        ├── sample1.cc
        └── sample1_unittest.cc

/samples/CMakeLists.txt:

cmake_minimum_required(VERSION 3.14)
project(sample1)

# GoogleTest requires at least C++11
set(CMAKE_CXX_STANDARD 11)

MESSAGE(STATUS "Binary dir:" ${PROJECT_BINARY_DIR})
MESSAGE(STATUS "Source dir:" ${PROJECT_SOURCE_DIR})


add_subdirectory(src/sample1)

# 开启测试
enable_testing()

# 添加到测试
add_test(NAME test_sample1 COMMAND ${PROJECT_BINARY_DIR}/src/sample1/sample1_unittest)

/samples/src/sample1/CMakeLists.txt:

set(LIB_STATIC_SRC sample1.cc)
set(LIB_STATIC_NAME static)
add_library(${LIB_STATIC_NAME} STATIC ${LIB_STATIC_SRC})
set_target_properties(${LIB_STATIC_NAME} PROPERTIES OUTPUT_NAME "sample1")


# 查找 GTest 库
find_package(GTest REQUIRED)

# GTest 的头文件
include_directories(${GTEST_INCLUDE_DIRS})

# 包含头文件
include_directories(${PROJECT_SOURCE_DIR}/include)
# 在build/src/sample1里搜索libsample1.a
link_directories(${PROJECT_BINARY_DIR}/src/sample1)

# 单元测试可执行文件
add_executable(sample1_unittest sample1_unittest.cc)

# 链接测试库
target_link_libraries( sample1_unittest
        ${GTEST_BOTH_LIBRARIES}     # google test 的两个库, 相当于下面两句
        # gtest_main  -lgtest -lgtest_main -lpthread    # 提供main, sample1_unittest里可以没有main
        # gtest      # 不提供main, sample1_unittest里要实现main

        pthread    # 依赖 pthread 库
        sample1    # 还有目标库
    )

编译:

mkdir build && cd build
cmake .. && make && make test

注意add_test必须放到根目录的CMakeLists.txt里,这样执行make test才能发现有效的测试目标。

Google Mock

https://google.github.io/googletest/gmock_for_dummies.html

另外还有GoogleTest配套的测试库Google Mock,文档说类似java中也有jMock,可以对类(或者说虚类,接口类)进行测试。

GoogleTest也可以测试类,但靠真实对象进行测试不太讲究。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:17:48  更:2022-04-01 00:19:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:22:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码