gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:29 27 4
gpt4 key购买 nike

是否可以在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com