对不起,标题不好,我不知道如何为这个问题加上标题。请编辑并使其更好。
我正在使用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" );
上一次尝试的错误消息是:
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)’
我究竟做错了什么?我该如何正确书写?
最佳答案
使用QString时,请使用QVERIFY2(condition, qPrintable(...))
。
第二个参数必须是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)
?如果发生故障,它将发出期望值和实际值。
关于c++ - Qt测试QVERIFY2()字符串和int串联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17353825/