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

时间:2021-02-19 16:00:55

标签: googletest

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

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

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

提前致谢...

1 个答案:

答案 0 :(得分:1)

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

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

此样式始终用于 Windows。

当使用“快速”样式时,它可能取决于外部库是否需要再次初始化或通过 fork()/clone() 调用保留其状态。

相关问题