Qt测试QVERIFY2()字符串和int连接

Fre*_*Ben 2 c++ qt unit-testing qt4 qtestlib

抱歉标题不好,我不知道如何标题这个问题.请编辑并使其更好.

我正在使用Qt测试框架编写测试,我正在尝试编写一些有用的输出供QVERIFY2()宏使用.所有以下语句都无法使用大致相同的错误消息进行编译:

QVERIFY2( spy.count() == 1, "Emitted signal pathChanged() was emitted " + spy.count() + " times instead of 1 time" );
QVERIFY2( spy.count() == 1, QString( "Emitted signal pathChanged() was emitted " ) + QString( spy.count() ) + QString( " times instead of 1 time" ) );
QVERIFY2( spy.count() == 1, "Emitted signal pathChanged() was emitted " + QString( spy.count() ) + " times instead of 1 time" );
Run Code Online (Sandbox Code Playgroud)

上次尝试的错误消息是:

PathTester.cxx: In member function ‘void PathTester::testReservePath()’:
PathTester.cxx:241:128: error: cannot convert ‘QString’ to ‘const char*’ for argument ‘3’ to ‘bool QTest::qVerify(bool, const char*, const char*, const char*, int)’
PathTester.cxx:241:243: error: cannot convert ‘QString’ to ‘const char*’ for argument ‘3’ to ‘bool QTest::qVerify(bool, const char*, const char*, const char*, int)’
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我怎么能正确写出来?

pep*_*ppe 9

使用QVERIFY2(condition, qPrintable(...))QString时使用.

第二个参数必须是 a const char *.在你的所有情况下,你都在创建一个QString - 这确实非常方便,因为它允许你+用于连接,或者QString::arg()等; 你需要一个转换char *,这不是隐含的,这就是做什么的qPrintable().

详细说明:qPrintable(string)是简写string.toLocal8Bit().constData().Qt 5.4还将介绍qUtf8Printable(string)哪个相当于string.toUtf8().constData().

附录:除了传递给什么的技术性,你QVERIFY2为什么不使用QCOMPARE(spy.count(), 1)?如果失败,它将发出预期值和实际值.