Qt 如何使用GoogleTest框架漂亮地打印QString?

Qt 如何使用GoogleTest框架漂亮地打印QString?,qt,qt5,googletest,pretty-print,qstring,Qt,Qt5,Googletest,Pretty Print,Qstring,我将GoogleTest(GTest)框架与Qt5应用程序结合使用 每当使用QString参数测试失败时,框架就会尝试打印所有涉及的值。但是,它不能自动处理外来类型(在本例中是Qt5的QString) 如何让GoogleTest自动漂亮地打印QString(=无需每次手动转换)?GoogleTest指南介绍了如何处理自定义类型 最后,要使GoogleTest能够使用QString,只需添加以下代码片段: QT_BEGIN_NAMESPACE inline void PrintTo(const

我将GoogleTest(GTest)框架与Qt5应用程序结合使用

每当使用QString参数测试失败时,框架就会尝试打印所有涉及的值。但是,它不能自动处理外来类型(在本例中是Qt5的QString)


如何让GoogleTest自动漂亮地打印QString(=无需每次手动转换)?

GoogleTest指南介绍了如何处理自定义类型

最后,要使GoogleTest能够使用QString,只需添加以下代码片段:

QT_BEGIN_NAMESPACE
inline void PrintTo(const QString &qString, ::std::ostream *os)
{
    *os << qUtf8Printable(qString);
}
QT_END_NAMESPACE
QT\u开始\u名称空间
内联void PrintTo(常量QString&QString,::std::ostream*os)
{

*操作系统其他一些技巧:如果您还想在字符串中打印Unicode字符,请使用
qtf8printable
qPrintable
转换为“本地8位”,这可能不是Unicode干净的,尤其是在Windows上);并通过
QDebug
(可能作用于
QBuffer
,托管
QByteArray
)如果要打印
QString
s并转义不可打印的字符。我无法实现这一点。有趣的是,如果我定义两个PrintTo函数(一个接受QString&另一个接受常规QString),我会得到一个编译器错误
错误C2668:“PrintTo”:对重载函数的不明确调用可能是“void PrintTo”(const-QString,std::ostream*)或“void PrintTo(const-QString,std::ostream*)“
但是,如果我只有一个似乎从来没有称之为…什么是神奇的酱汁?@gremwell您是否确保PrintTo不在您的应用程序名称空间中?除了我不知道酱汁可能是什么。我只是在同一CPP文件中声明我的第一个装置之前放置这些行,它就可以工作了(QT 5.7和最新的GoogleTest)@Gremwell,我也在努力解决这个问题,但这个问题的答案为我解决了这个问题@Eelke我对翻译单位也有同样的问题。我已经相应地编辑了答案。
QT_BEGIN_NAMESPACE
inline void PrintTo(const QString &qString, ::std::ostream *os)
{
    *os << qUtf8Printable(qString);
}
QT_END_NAMESPACE
*os << "\"" << qUtf8Printable(qString) << "\"";