GTest 技术调研
条评论对 GoogleTest(https://github.com/google/googletest)的技术调研。
步骤
1 | git clone https://github.com/google/googletest.git |
编译选项
-DGTEST_USE_OWN_TR1_TUPLE=1
。使用自带的 TR1 Tuple。若使用自己工程的 TR1 Tuple library,须有-DGTEST_USE_OWN_TR1_TUPLE=0
。-DGTEST_HAS_TR1_TUPLE=0
。禁用使用了 TR1 Tuple 的特性。
Some Google Test features require the C++ Technical Report 1 (TR1) tuple library, which is not yet available with all compilers.
-DGTEST_HAS_PTHREAD=1
。当pthread
启用时,GTest 是线程安全的。在#include "gtest/gtest.h"
之后检查GTEST_IS_THREADSAFE
宏可以判断是否是线程安全的。如果判断不准确,可定义该宏强制启用pthread
。-DGTEST_CREATE_SHARED_LIBRARY=1
。若需要生成动态链接库,添加此选项。-DGTEST_LINKED_AS_SHARED_LIBRARY=1
。若要使用动态库编译自己的测试代码,添加此选项。-DGTEST_DONT_DEFINE_XXXXX=1
。为防止与已有宏冲突,将 GTest 中的宏XXXXX
改为GTEST_XXXXX
。
Sample 1: 测试函数
- Step #1: 包含头文件。
1 |
Step #2: 定义测试。
- 两个参数:测试用例名 test case name、测试名 test name。
- 必须是合法 C++ 标识符,不能有下划线
_
。 - 多个 logically related 的测试组成一个测试用例。
- 使用在
gtest.h
中定义的宏来写测试。 - GTest 保证每个测试做且只做一次,但不保证测试顺序。
1 | // Tests Factorial(). |
- Step #3:在
main()
中调用RUN_ALL_TESTS()
(甚至不需要注册这些测试),成功则返回 0。
Sample 2: 测试类
- 一般会为每个类中的方法定义一个测试用例。(当然可按需决定)
- 使用
EXPECT_EQ
比较指针和NULL
会触发编译器警告。
Sample 3: 使用 test fixture
- text fixture 是用于保存多个测试间共享的对象和方法。
- 为了让每个测试 independent and repeatable,每个测试用例分别有这些共享对象的一个拷贝,不会相互影响。
1 | // To use a test fixture, derive a class from testing::Test. |
Sample 4: 利用继承在多个用例中复用 test fixture
如要求让所有测试在 5s 内完成。
1 | class QuickTest : public testing::Test { |
Sample 5:
Sample 6: 利用模板进行接口测试
两种方式:
- “typed tests”:知道所有的要测试的派生类。
- “type-parameterized tests”:
Sample 7: ::testing::TestWithParam
- 本文链接:http://ifanze.cn/2018/08/06/GTest技术调研/
- 版权声明:转载请在评论区说明。