如何使用全局静态初始化方法正确 运行 googletest

How to properly run googletest with global static initializer methods

不知道有没有人有在googletest中处理静态初始化函数的实践经验?

例如,假设您有一个外部库,它要求您对每个进程仅 运行 ExtLib::Init() 一次,不能再多了。您需要测试的代码显然必须使用此 ExtLib。

然后假设您有几个测试 运行 一些 EXPECT_DEATH。据我了解,其中一些死亡测试 运行 在子流程中进行。 我是否必须在传递给 EXPECT_DEATH 的正文中调用 ExtLib::Init 或者我该如何处理它?

提前致谢...

你应该使用AddGlobalTestEnvironment()注册一个class来执行global setup and tear-down,比如初始化外部库。

根据 the documentation,当使用死亡测试的“线程安全”风格时,每个死亡测试都会产生一个新进程来执行测试程序,但只有 运行 是一个测试。我假设它也会 运行 全局设置和拆卸,但你必须检查一下。例如,通过将消息写入 std::cerr 或使用调试器。

此样式始终用于 Windows。

当使用“快速”风格时,它可能取决于外部库是否需要再次初始化或者它的状态在 fork()/clone() 调用中被保留。