对不起,标题不好,我不知道如何为这个问题加上标题。请编辑并使其更好。

我正在使用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/

10-11 18:10