googletest:死亡测试:单个测试中的多个期望

googletest: death tests: multiple expect_exit in single test

本文关键字:测试 期望 单个 googletest      更新时间:2023-10-16

是否可以在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()功能的某些结果,则在两个宏之间有任何断言,儿童过程将击中并退出那里,因此它将无法到达G()。

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