我使用谷歌C++测试框架对代码进行单元测试。我使用带C++单元测试模块的Eclipse进行输出分析。
以前我使用过CppUnit,它有宏家族消息,可以这样调用:
CPPUNIT_ASSERT_EQUAL_MESSAGE("message",EXPECTED_VALUE,ACTUAL_VALUE)
并允许发送自定义消息来测试输出。
有办法在google测试输出中包含一些自定义文本吗?
(最好是将消息包含到现有程序读取的数据中,以便使用google测试进行自动单元测试。)
发布于 2013-05-10 22:50:41
gtest宏返回一个流,用于在测试失败时输出诊断消息。
EXPECT_TRUE(false) << "diagnostic message";
发布于 2015-03-19 21:52:44
在当前版本的gtest中,没有办法干净地这样做。我查看了代码,如果测试失败,将显示唯一的文本输出(包装在gtest“Messages”中)。
但是,在某个时候,gtest开始对屏幕进行printf
'ing,您可以利用上面的级别获得与平台无关的颜色。
这里有一个被黑的宏来做你想做的事。这使用了最普通的内部文本着色。当然,internal::
名称空间应该会敲响警钟,但是它可以工作。
用法:
TEST(pa_acq,Foo)
{
// C style
PRINTF("Hello world \n");
// or C++ style
TEST_COUT << "Hello world" << std::endl;
}
输出:
代码:
namespace testing
{
namespace internal
{
enum GTestColor {
COLOR_DEFAULT,
COLOR_RED,
COLOR_GREEN,
COLOR_YELLOW
};
extern void ColoredPrintf(GTestColor color, const char* fmt, ...);
}
}
#define PRINTF(...) do { testing::internal::ColoredPrintf(testing::internal::COLOR_GREEN, "[ ] "); testing::internal::ColoredPrintf(testing::internal::COLOR_YELLOW, __VA_ARGS__); } while(0)
// C++ stream interface
class TestCout : public std::stringstream
{
public:
~TestCout()
{
PRINTF("%s",str().c_str());
}
};
#define TEST_COUT TestCout()
发布于 2018-02-22 10:13:52
有一种非常简单的和hacky方法(不需要深入内部类或创建新的自定义类)。
只需定义一个宏:
#define GTEST_COUT std::cerr << "[ ] [ INFO ]"
并在测试中使用GTEST_COUT
(就像cout
):
GTEST_COUT << "Hello World" << std::endl;
你会看到结果:
他的发现归功于@Martin Nowak。
https://stackoverflow.com/questions/16491675
复制相似问题