Qt Test Строка QVERIFY2 () и конкатенация int

Извините за плохой заголовок, я понятия не имею, как озаглавить этот вопрос. Пожалуйста, отредактируйте и сделайте это лучше.

Я пишу тест, используя тестовую среду 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)’

Что я делаю неправильно? Как я могу написать это правильно?

1

Решение

использование QVERIFY2(condition, qPrintable(...)) при использовании QString.

Второй аргумент должно быть 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)? В случае отказа он выдаст ожидаемое значение и фактическое значение.

8

Другие решения

Я хотел бы добавить свои 5 центов. Хотя вы действительно можете использовать QCOMPARE в вашем конкретном случае, как предложено @peppe, иногда вам может потребоваться предоставить более подробное сообщение. Это дело для QVERIFY2. Насколько мне известно, лучший способ форматирования сообщения в этом случае — использование метода QString :: arg (). Например, в вашем случае вы можете написать:

QVERIFY2 (
spy.count() == 1,
QString ("Emitted signal pathChanged() was emitted %1 times instead of %2 time(s)")
.arg (spy.count())
.arg (1));

Таким образом, вы получите более читаемый код и можете изменить как фактическое, так и ожидаемое количество выражений.

1

По вопросам рекламы [email protected]