gtest的使用
一、TEST 有两个参数 : test case name 和 test name。test需要归类到test cases。例如: TEST(FactorialTest, Negative) 中 test is named "Negative", "FactorialTest" 是test case name 。test cases中的test执行是没有顺序的。
二、test fixture :
test fixture只是保存了一个对象或者函数,供其他tests共享使用。 test fixture只是代码共享,资源并不共享。每个test都会拷贝一份fixture使用。 比如说都要访问某个数据库的某张表,比如说都需要起浏览器,都需要调用post方法等。 这个时候每个测试用例单独写就显得很多余,TestFixture就应运而生。
class QueueTestSmpl3 : public testing::Test {}
TEST_F(QueueTestSmpl3, DefaultConstructor) {} 这时候会使用 TEST_F, 而不是TEST。看来test case名字必须是类名。同时test fixture可以被继承,将共享的函数逻辑放到父类中,在子类中可以重复使用。
三、类型(type-parameterized)
对于c++中继承关系虚函数不同实现的测试,可以这样:
1、首先定义一个 一些工程函数来生成不同的实现实例 :
2、定义一个test fixture class template:
google test提供了两种方式进行 resusing tests for different types :
a) typed tests (如果你已经知道了自己测试的所以类型):
i) 使用 TYPED_TEST_SUITE(TestCaseName,TypeList)来进行typed test case,
typedef Types<OnTheFlyPrimeTable, PreCalculatedPrimeTable> Implementations;
TYPED_TEST_SUITE(PrimeTableTest, Implementations);
ii) 然后使用 TYPED_TEST(TestCaseName, TestName) 定义一个typed test
b) type-parameterized tests ( you don't yet know all the types that you want to test):
i) 首先定义一个test fixture class template:
ii) 紧接着顶一个一个test case。它的参数是test fixture,同时也是test case的名字。注意有个后缀_P,这个后缀的意思是: parameterized 后者 pattern:
iii) 后面就是使用TYPED_TEST_P(TestCaseName,TestName)来定义test
iiii) 最后一步,你必须枚举你定义的test:
iiiii) 但上面我们只是 test pattern 定义完毕,然后闭关没有实际的test存在。要将抽象的test pattern转换为真是的test,我们需要实例化一个types列表。通常test pattern被定义在头文件中可以使用#include来包含它。如果分开实例化,你可以给它一个名字。:
posted on 2021-12-17 19:11 Ultraman_X 阅读(323) 评论(0) 编辑 收藏 举报