我使用Google C++ Testing Framework进行代码的单元测试.我使用Eclipse CDT和C++单元测试模块进行输出分析.
以前我用CppUnit它有宏家族 CPPUNIT*_MESSAGE,可以像这样调用:
CPPUNIT_ASSERT_EQUAL_MESSAGE("message",EXPECTED_VALUE,ACTUAL_VALUE)
Run Code Online (Sandbox Code Playgroud)
并允许发送自定义消息以测试输出.
有没有办法在谷歌测试输出中包含一些自定义文本?
(最好是包含使用谷歌测试自动单元测试的现有程序读取的数据消息的方式.)
use*_*113 133
当测试失败时,gtest宏返回一个流以输出诊断消息.
EXPECT_TRUE(false) << "diagnostic message";
Run Code Online (Sandbox Code Playgroud)
Mar*_*ata 56
在当前版本的gtest中无法干净地完成它.我查看了代码,如果测试失败,将显示唯一的文本输出(包含在gtest"Messages"中).
但是,在某些时候,gtest开始printf进入屏幕,你可以利用上面的级别来获得与平台无关的颜色.
这是一个被黑客攻击的宏来做你想做的事.这使用gtest内部文本着色.当然internal::命名空间应该是警告铃声,但是,嘿,它的工作原理.
用法:
TEST(pa_acq,Foo)
{
// C style
PRINTF("Hello world \n");
// or C++ style
TEST_COUT << "Hello world" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:

码:
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()
Run Code Online (Sandbox Code Playgroud)
Vla*_*lad 14
从高级 googletest 主题中,您可以使用一些宏来实现此目的。
SUCCEED() << "success/info message";
SUCCEED() 仅输出您的消息并继续。它不会将测试标记为已通过。其结果将由以下断言决定。FAIL() << "test failure message";
FAIL() 将您的测试标记为失败,输出您的消息,然后从函数返回。因此只能在返回 void 的函数中使用。ADD_FAILURE() << "test failure message";
ADD_FAILURE() 将您的测试标记为失败并输出您的消息。它不会从调用函数返回,并且执行流程会像 EXPECT_ 系列宏一样继续。有一种非常简单且hacky的方式(无需深入了解内部类或创建新的自定义类)。
只需定义一个宏:
#define GTEST_COUT std::cerr << "[ ] [ INFO ]"
Run Code Online (Sandbox Code Playgroud)
并在测试中使用GTEST_COUT(就像cout):
GTEST_COUT << "Hello World" << std::endl;
Run Code Online (Sandbox Code Playgroud)
您会看到这样的结果:
幸得@马丁·诺瓦克,他的发现。
小智 5
参考 Mark Lakata 的回答,这是我的方法:
Step1:创建头文件,例如: gtest_cout.h
代码:
#ifndef _GTEST_COUT_H_
#define _GTEST_COUT_H_
#include "gtest/gtest.h"
namespace testing
{
namespace internal
{
enum GTestColor
{
COLOR_DEFAULT, COLOR_RED, COLOR_GREEN, COLOR_YELLOW
};
extern void ColoredPrintf(GTestColor color, const char* fmt, ...);
}
}
#define GOUT(STREAM) \
do \
{ \
std::stringstream ss; \
ss << STREAM << std::endl; \
testing::internal::ColoredPrintf(testing::internal::COLOR_GREEN, "[ ] "); \
testing::internal::ColoredPrintf(testing::internal::COLOR_YELLOW, ss.str().c_str()); \
} while (false); \
#endif /* _GTEST_COUT_H_ */
Run Code Online (Sandbox Code Playgroud)
Step2:GOUT在你的gtest中使用
用法:
#include "gtest_cout.h"
TEST(xxx, yyy)
{
GOUT("Hello world!");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35777 次 |
| 最近记录: |