当gtest用例失败时做自己想做的事

发表于:2012-11-09来源:博客园作者:jovenchen点击数: 标签:测试用例
在使用gtest做单元测试或接口测试时可能会遇到这样的场景:当某个用例失败时,需要备份当时的执行场景(如系统时间、一些变量值和组件运行日志等),便于测试完成后对失败用例进行重现和分析。
在使用gtest做单元测试或接口测试时可能会遇到这样的场景:当某个用例失败时,需要备份当时的执行场景(如系统时间、一些变量值和组件运行日志等),便于测试完成后对失败用例进行重现和分析。

  首先想到的是在用例中对每个断言的结果进行判断,但如果用例中存在比较多断言或用例很多时,要在每个用例中都增加一堆的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()函数获取单件的实例;

 

原文转自:http://www.ltesting.net