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 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> gtest安装与简单实例 - googletest(一) -> 正文阅读

[C++知识库]gtest安装与简单实例 - googletest(一)

gtest是Google开发的一个开源单元测试框架,git仓库点击这里获取。主要针对c/c++,gtest有如下特点:

  • 提供强大的断言集,支持包括布尔、整型、浮点型、字符串等
  • 提供断言方法自定义扩展
  • 自动收集测试用例,无需开发者再次组织
  • 提供死亡测试功能
  • 可以将公共的用例初始化和清理工作放入测试夹具中,由gtest自动调用
  • 使用参数化自动生成多个相似的测试用例

1. gtest的获取和编译

1.1 gtest获取

gtest在GitHub上是开源项目,可以直接clone或者下载软件包。

git clone https://gitee.com/mirrors/googletest.git

1.2 ubuntu18.04编译

cd googletest-main
mkdir build
cd build
cmake ..
make

编译以后的静态库在build/lib下面,共四个静态库文件。

1.3 简单实例

创建测试用例目录utest,里面包含了gtest的源码和编译结果库文件。在测试中建立include、lib两个目录分别用来存放gtest对外提供的头文件和编译出来的库文件。注意include和lib下面的gtest子目录是最终实际保存头文件或者库的最终内容。

book@100ask:~/utest$ tree
.
├── a.out
├── googletest-main
├── gtest.cpp
├── include
│?? └── gtest
└── lib
    └── gtest

目录建立成功以后,通过如下命令将gtest中结果拷贝到需要编译的架构中:

cp gtest1110/build/lib/*.a lib/gtest/
cp -r gtest1110/googletest/include/gtest/ include/

建立测试文件gtest.cpp,代码内容如下

#include<gtest/gtest.h>
using namespace testing;
int add(int a,int b){
    return a+b;
}
TEST(testCase,test0){
    EXPECT_EQ(add(2, 3), 5); // 正确
    EXPECT_EQ(add(2, 3), 4); // 错误
}
int main(int argc,char **argv){
  InitGoogleTest(&argc,argv);
  return RUN_ALL_TESTS();
}

通过如下命令将代码和库文件编译成一个可执行文件进行测试

g++ gtest.cpp -L lib/gtest -I include -lgtest -pthread

测试执行结果如下:

book@100ask:~/utest$ ./a.out 
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from testCase
[ RUN      ] testCase.test0
gtest.cpp:9: Failure
Expected equality of these values:
  add(2, 3)
    Which is: 5
  4
[  FAILED  ] testCase.test0 (0 ms)
[----------] 1 test from testCase (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[  PASSED  ] 0 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] testCase.test0

 1 FAILED TEST

2. Gtest简单说明

测试用例编写需要包含gtest.h头文件,文件中包含了核心的对外测试接口。

2.1 基本测试单元

gtest代码中包含了一些简单的测试用例,比方说sample_unitest.c中如下这一段

// Tests factorial of positive numbers.
TEST(FactorialTest, Positive) {
  EXPECT_EQ(1, Factorial(1));
  EXPECT_EQ(2, Factorial(2));
  EXPECT_EQ(6, Factorial(3));
  EXPECT_EQ(40320, Factorial(8));
}

这一段给定了一个case基本的结构, TEST宏两个参数官方解释为:[TestCaseName,TestName],而我对这两个参数的定义是:[TestSuiteName,TestCaseName],在下一篇我们再来看为什么这样定义。

对检查点的检查,我们上面使用到了EXPECT_EQ这个宏,这个宏用来比较两个数字是否相等。Google还包装了一系列EXPECT_* 和ASSERT_*的宏,而EXPECT系列和ASSERT系列的区别是:

  • EXPECT_*? 失败时,案例继续往下执行。
  • ASSERT_* 失败时,直接在当前函数中返回,当前函数中ASSERT_*后面的语句将不会执行。

另外,测试一个case中测试的前后顺序是有讲究的,前面的顺序要首先满足然后依次推进。也就是前面一个测试用例是后面一个测试用例成立的必要不充分条件。

2.2 测试运行

“testing::InitGoogleTest(&argc, argv);” :gtest的测试案例允许接收一系列的命令行参数,因此,我们将命令行参数传递给gtest,进行一些初始化操作。gtest的命令行参数非常丰富,在后面我们也会详细了解到。“RUN_ALL_TESTS()” :运行所有测试案例。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:14:51  更:2022-05-11 16:16:06 
 
开发: 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/23 18:34:31-

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