c++ - googletest:死亡测试:单个测试中有多个 expect_exit

标签 c++ unit-testing googletest

是否可以在 Windows 平台上的单个测试中使用多个 EXPECT_EXIT 宏? 出现此问题是因为在 Windows 平台上,死亡测试以“线程安全”模式工作,因此由 EXPECT_EXIT 宏生成的进程将从头开始运行所有测试。考虑示例代码:

TEST_F(MyFixtureDeathTest, Test1)
{
    EXPECT_EXIT(f(), ::testing::ExitedWithCode(1), "message1");

//....
// actions after the exit (for instanse, emulation of the application correct restart)
//....

    EXPECT_EXIT(g(), ::testing::ExitedWithCode(1), "message2");
}

所以当测试到达第二个 EXPECT_EXIT 宏时,它将使代码从测试开始运行,因此它将调用 f() 函数,在那里退出,实际上永远不会到达 g() 函数的主体. 也许,我根本不应该使用 GoogleTest 来完成这项任务,对吗?

感谢任何帮助。谢谢。

更新。 (澄清)实际上,我现在非常确定,在所描述的代码片段中,即使是函数 f() 也不会从第二个 EXPECT_EXIT 宏生成的进程中调用。

更新。现在的问题对我来说似乎有点不同。正如 VladLosev 所说,第一个宏将在第二个宏生成的子进程中被完全忽略。但是,如果基于 f() 函数的某些结果在两个宏之间进行任何断言,子进程将命中断言并在那里退出,因此它将无法到达 g()。

最佳答案

不,此代码将按预期工作。死亡测试子进程知道它是从哪个死亡测试宏调用的,并且只会执行该宏中指定的测试语句。例如,在您的代码中,在第二个 EXPECT_EXIT 宏中调用的子进程将只执行 g() 并跳过 f()

关于c++ - googletest:死亡测试:单个测试中有多个 expect_exit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21377154/

相关文章:

c++ - 仅 header 库中的 "Does not name a type"

python - 单元测试中奇怪的对象实例行为

c++ - 如何在 C++ 类中使用 JNI registerNatives?

c++ - 获取剪贴板数据(CF_UNICODETEXT);

c# - 单元测试项目是否可以加载目标应用程序的 app.config 文件?

c++ - 在单元测试中,如何在不使用运算符== 的情况下比较两个对象,这可能会错过新成员?

c++ - 排除时间测试

c++ - netbeans c++ googletest 从 gui 运行测试

c++ - 在单元测试时如何模拟基类的非重写、虚拟/非虚拟方法?

c++ - 从堆中为数组分配地址