【问题标题】:Google death tests without message谷歌死亡测试没有消息
【发布时间】:2021-08-24 00:07:02
【问题描述】:

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

基本测试工作正常,但是我没有得到关于死亡测试的一些东西。像EXPECT_DEBUG_DEATH 这样的死亡测试宏有第二个参数(“matcher”),它应该是一个正则表达式字符串,在测试结束之前与打印到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(); }, "");
}

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

任何想法为什么没有收到死亡消息?

【问题讨论】:

  • 给定的用例没有使用LOG(DFATAL) &lt;&lt; "Bye";LOG(DFATAL) &lt;&lt; "Darn";

标签: c++ googletest stderr


【解决方案1】:

原来我这边有两个误解:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 2015-12-04
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多