Google 没有消息的死亡测试

Google death tests without message

我正在 Linux 和 GCC10 上尝试 Google 测试框架。

基本测试工作正常,但是我没有得到关于死亡测试的一些信息。像 EXPECT_DEBUG_DEATH 这样的死亡测试宏有第二个参数(“匹配器”),它应该是一个正则表达式字符串,它与在测试结束之前打印到 stderr 的任何内容进行比较。

TEST(MyDeathTests, MyDeathTest)
{
   EXPECT_DEBUG_DEATH({ assert(false); }, "");
   EXPECT_DEBUG_DEATH({ fprintf(stderr, "Bye\n"); fflush(stderr); exit(1); }, "");
   EXPECT_DEBUG_DEATH({ std::cerr << "Darn" << std::endl << std::flush; std::abort(); }, "");
}

正确检测到死亡。但只有在使用空匹配器字符串时测试才会成功,如您在上面的代码片段中所见。测试输出中的“Actual msg”始终为空。我用 exit()stdoutstderr 和 C 输出函数尝试了一些变体,但没有任何效果。

知道为什么没有收到死亡消息吗?

原来我这边有两个误会:

  1. 匹配器字符串是子字符串模式。这意味着一个空的匹配器字符串匹配任何东西(不仅仅是我假设的空消息)。
  2. Actual msg 并没有真正显示空消息字符串。它只使用一种奇怪的格式。 Google 测试在打印错误消息之前在 Actual msg 之后添加一个换行符,后跟 [ DEATH ]。这让我觉得我会在控制台上看到未捕获的错误输出,但实际上它是正确检测到的 Actual msg.

了解这些事实后,一切都按预期进行。