不知道有没有人有在googletest中处理静态初始化函数的实践经验?
例如,假设您有一个外部库,它要求您为每个进程只运行 ExtLib::Init() 一次,不能再运行一次。您需要测试的代码显然必须使用这个 ExtLib。
然后假设您有几个测试正在运行,其中包含 EXPECT_DEATH。据我了解,其中一些死亡测试在子进程中运行。 我是否必须在传递给 EXPECT_DEATH 的正文中调用 ExtLib::Init 或者我该如何处理?
提前致谢...
答案 0 :(得分:1)
您应该使用 AddGlobalTestEnvironment()
注册一个类来执行 global setup and tear-down,例如初始化外部库。
根据the documentation,当使用“线程安全”风格的死亡测试时,每个死亡测试都会产生一个新进程,该进程执行测试程序但只运行一个测试。我假设它也将运行全局设置和拆卸,但您必须检查这一点。例如,通过向 std::cerr
写入消息或使用调试器。
此样式始终用于 Windows。
当使用“快速”样式时,它可能取决于外部库是否需要再次初始化或通过 fork()
/clone()
调用保留其状态。