如何使用 GoogleTest 框架漂亮地打印 QString?
How to pretty-print QString with GoogleTest framework?
我将 GoogleTest (GTest) 框架与 Qt5 应用程序结合使用。
每当使用 QString 参数的测试失败时,框架都会尝试打印所有涉及的值。但是,它不能自动处理外部类型(在这种情况下是 Qt5 的 QString)。
QString test = "Test";
ASSERT_EQ(test, "Value");
如何让 GoogleTest 自动漂亮地打印 QString(= 无需每次都手动转换它们)?
GoogleTest 指南解释了一般情况下如何 teach the framework 处理自定义类型。
最后,为了使 GoogleTest 能够使用 QString,只需添加以下代码片段:
QT_BEGIN_NAMESPACE
inline void PrintTo(const QString &qString, ::std::ostream *os)
{
*os << qUtf8Printable(qString);
}
QT_END_NAMESPACE
此代码不得在您的测试装置的命名空间中,但必须在 Qt 命名空间中(或者通常在定义了应该漂亮打印的类型的命名空间中)。
此代码也必须可以从您在该特定类型上调用 GoogleTest 断言的所有翻译单元查看,否则将不会被使用(参见评论)。
因此,GoogleTest 现在可以漂亮地打印 QString:
当然你也可以加一些引号来更清楚的表明它来自一个QString:
*os << "\"" << qUtf8Printable(qString) << "\"";
资料来源:高级咨询工程师 Justin Noel 的网络研讨会 ICS Qt Test-Driven Development Using Google Test and Google Mock
我将 GoogleTest (GTest) 框架与 Qt5 应用程序结合使用。
每当使用 QString 参数的测试失败时,框架都会尝试打印所有涉及的值。但是,它不能自动处理外部类型(在这种情况下是 Qt5 的 QString)。
QString test = "Test";
ASSERT_EQ(test, "Value");
如何让 GoogleTest 自动漂亮地打印 QString(= 无需每次都手动转换它们)?
GoogleTest 指南解释了一般情况下如何 teach the framework 处理自定义类型。
最后,为了使 GoogleTest 能够使用 QString,只需添加以下代码片段:
QT_BEGIN_NAMESPACE
inline void PrintTo(const QString &qString, ::std::ostream *os)
{
*os << qUtf8Printable(qString);
}
QT_END_NAMESPACE
此代码不得在您的测试装置的命名空间中,但必须在 Qt 命名空间中(或者通常在定义了应该漂亮打印的类型的命名空间中)。 此代码也必须可以从您在该特定类型上调用 GoogleTest 断言的所有翻译单元查看,否则将不会被使用(参见评论)。
因此,GoogleTest 现在可以漂亮地打印 QString:
当然你也可以加一些引号来更清楚的表明它来自一个QString:
*os << "\"" << qUtf8Printable(qString) << "\"";
资料来源:高级咨询工程师 Justin Noel 的网络研讨会 ICS Qt Test-Driven Development Using Google Test and Google Mock