googletest - Googletest:成功断言时未打印消息
问题描述
我试图在使用 GTest 创建的成功单元测试中发出警告。
我希望下面的代码在某处打印“我的警告消息”:
#include <gtest/gtest.h>
GTEST_API_ int main(int argc, char** argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
TEST(suite, name)
{
EXPECT_TRUE(true) << "My warning message";
}
但是,我在控制台和 XML 文件中都没有看到预期的字符串。
我尝试在调试器中单步执行代码,并看到该字符串存储在::testing::AssertionResult
宏内部创建的类的对象中EXPECT_TRUE
。
但是,目前尚不清楚如何使其出现。
将 Googletest 更新到 master 分支的负责人并没有帮助。
解决方案
只有当断言失败时,所有断言/期望才会打印自定义消息。在这种期望的情况下:
EXPECT_TRUE(true) << "My warning message";
它永远不会被触发。您可以致电确认:
EXPECT_TRUE(false) << "My warning message";
但是,使用它会使您的测试失败。如果您想在测试成功时打印消息,您可以使用SUCCEED
和自定义TestEventListener
:
class SuccessListener : public testing::EmptyTestEventListener {
void OnTestPartResult(const testing::TestPartResult& result) override {
if (result.type() == testing::TestPartResult::kSuccess) {
printf("%s\n", result.message());
}
}
};
int main(int argc, char* argv[]) {
::testing::InitGoogleTest(&argc, argv);
testing::UnitTest::GetInstance()->listeners().Append(new SuccessListener);
return RUN_ALL_TESTS();
}
TEST(SuccessPrintTest, SuccessPrint) {
SUCCEED() << "Custom message";
}
输出是:
[ RUN ] SuccessPrintTest.SuccessPrint
Succeeded
Custom message
[ OK ] SuccessPrintTest.SuccessPrint (0 ms)
如果打印到控制台,这将非常冗长 - 您可能希望将其重定向到文件(将由 处理SuccessListener
)。
推荐阅读
- vue.js - 在 Vuex 中为同一组件实现双向数据绑定的不同方法
- html - scss 文件中的无效属性
- java - OOP 中“抽象”的正确定义是什么?
- python - str.replace 除非字符串后跟某些文本
- python - 将列表元素分成单独的数字并写入记事本文件
- python - Python:我可以使 read_excel sheet_name 不区分大小写吗
- node.js - 节点 cron 在特定日期后每 7 天运行一次
- android - 如何在 onclick 中使用私有 void?
- python - 如何打印字典的名字?
- python - NumPy 矩阵运算在不同的机器上产生不同的结果