首先想到的是在用例中对每个断言的结果进行判断,但如果用例中存在比较多断言或用例很多时,要在每个用例中都增加一堆的if语句,这样很麻烦,代码也不美观。于是研究了下gtest的源码,发现gtest有提供获取当前用例信息的接口:
(1)gtest用例结构
在使用它的接口之前,首先得理解清楚其用例结构。gtest中有3个与用例结构相关的类:TestCase、TestInfo和Test。
TestCase并不是指的用例,而且我们平常说的用例集(test suite),而且Test才是我们平常说的用例,所以TestCase是Test的集合;TestInfo是存放用例信息的类,包括用例集名、用例名和执行结果等信息;TestCase中有个TestInfo*的vector,用于保存用例集中每个用例的信息。
(2)TestInfo和Test的关联
Test类中没有TestInfo的成员,那么它们是怎么关联起来的呢?通过代码调试用例的执行过程发现,在所有用例之前会把用例的信息写进TestInfo*的vector中,而在构造TestInfo对象时,通过一个TestFactoryBase* factory的成员与相应的用例类绑定,执行到某个用例时,再通过相应的CreateTest函数来创建用例对象。
(3)UniTest::GetInstance()
UnitTest是个单件,可以通过UniTest::GetInstance()函数获取单件的实例;