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()
、stdout
、stderr
和 C 输出函数尝试了一些变体,但没有任何效果。
知道为什么没有收到死亡消息吗?
原来我这边有两个误会:
- 匹配器字符串是子字符串模式。这意味着一个空的匹配器字符串匹配任何东西(不仅仅是我假设的空消息)。
Actual msg
并没有真正显示空消息字符串。它只使用一种奇怪的格式。 Google 测试在打印错误消息之前在 Actual msg
之后添加一个换行符,后跟 [ DEATH ]
。这让我觉得我会在控制台上看到未捕获的错误输出,但实际上它是正确检测到的 Actual msg
.
了解这些事实后,一切都按预期进行。
我正在 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()
、stdout
、stderr
和 C 输出函数尝试了一些变体,但没有任何效果。
知道为什么没有收到死亡消息吗?
原来我这边有两个误会:
- 匹配器字符串是子字符串模式。这意味着一个空的匹配器字符串匹配任何东西(不仅仅是我假设的空消息)。
Actual msg
并没有真正显示空消息字符串。它只使用一种奇怪的格式。 Google 测试在打印错误消息之前在Actual msg
之后添加一个换行符,后跟[ DEATH ]
。这让我觉得我会在控制台上看到未捕获的错误输出,但实际上它是正确检测到的Actual msg
.
了解这些事实后,一切都按预期进行。