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编辑  收藏  举报

导航