Gtest Advance

全局设置和拆卸

正如您可以在test级别和test suite级别进行set-uptear-down一样,您也可以在测试程序级别(test program)进行设置和拆卸。方法如下。

首先,对::testing::Environment类派生一个类以定义一个测试环境,该环境知道如何set-uptear-down

class Environment : public ::testing::Environment {
 public:
  // override保留字表示当前函数重写了基类的虚函数。
  ~Environment() override {}

  // Override this to define how to set up the environment.
  void SetUp() override {}

  // Override this to define how to tear down the environment.
  void TearDown() override {}
};

然后,通过调用::testing::AddGlobalTestEnvironment()函数向 googletest 注册Environment class的实例:

Environment* AddGlobalTestEnvironment(Environment* env);

现在,当RUN_ALL_TESTS()被调用时,它会首先调用每个Environment对象的SetUp()方法,然后,如果没有任何环境报告致命故障,并且没有调用GTEST_SKIP(),则运行测试。无论测试是否运行,RUN_ALL_TESTS()都会为每个Environment对象调用TearDown()

允许注册多个Environment对象。在此suite中,会按注册顺序调用它的SetUp()方法,并按相反的顺序调用它的TearDown()

注意:googletest拥有已经注册的Environment对象的所有权,因此,不要再自己手动删除它们。

你应该在调用RUN_ALL_TESTS()之前先调用AddGlobalTestEnvironment(),比如:在main()函数中。

如果使用了gtest_main,则需要在main()开始之前调用它才能生效。一种方法是定义如下的全局变量:

testing::Environment* const foo_env =
    testing::AddGlobalTestEnvironment(new FooEnvironment);

但是,我们强烈建议您编写自己的main()函数并在mian()函数中调用AddGlobalTestEnvironment()。因为依赖全局变量的初始化会使代码更难阅读,并且当您在不同的编译单元注册了多个环境并且这些环境之间存在依赖关系时,可能会导致问题(注意:编译器不保证来自不同编译单元的全局变量的初始化顺序)。

参考文献

  1. https://google.github.io/googletest/advanced.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值