googletest:死亡测试:单次测试中有多个expect_exit

时间:2014-01-27 09:26:42

标签: 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来完成这项任务,是吗?

感谢任何帮助。感谢。

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

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

1 个答案:

答案 0 :(得分:1)

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