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文件中都看不到预期的字符串。

我已经尝试在调试器中逐步执行代码,并看到该字符串存储在宏EXPECT_TRUE中创建的类::testing::AssertionResult的对象中。

然而,目前尚不清楚该如何让它出现。

将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("%sn", 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处理(。

最新更新