[Решено] Странно работающий QTest

Модератор: Модераторы разделов

Аватара пользователя
devilr
Сообщения: 3144
ОС: Mandriva => Gentoo (~amd64)

[Решено] Странно работающий QTest

Сообщение devilr »

Доброго времени суток!
Требуется подтвердить или опровергнуть баг.
К теме прикреплён небольшой проект. Который просто использует QTest. Он отличается от того, что в примерах, наличием функции с названием test_add_data. И она не вызывается.
Если переименовать - всё будет работать.
Было подозрение, что название функции пересекается с какой то внутренней функцией. Но, ведь проект собирается без единого варнинга, не говоря уже об ошибке.
Проверьте, кто сможет. Qt 5.15.2 у меня.
Сборка обычная:
qmake
make
Запуск
./tutorial1
Результат

Код: Выделить всё

********* Start testing of TestQString *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 10.2.1 20201016), gentoo unknown
PASS   : TestQString::initTestCase()
PASS   : TestQString::toUpper()
PASS   : TestQString::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of TestQString *********
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось devilr 08.03.2021 10:42, всего редактировалось 1 раз.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Странно работающий QTest

Сообщение Hephaestus »

Я в плюсах мало что понимаю. В Qt понимаю ещё меньше.
Попробовал собрать Ваш пример. Так, для смеха.
У меня в системе есть и qt4 (4.8.7) , и qt5 (5.9.7).
По умолчанию сработала qt4. Результат такой же, как у Вас. Так что, если это бага, то какая-то давняя.
Была мысль, что не нравятся символы подчеркивания в имени функции, но нет, не подтвердилось.

По поводу отсутствия варнингов. Варнинги, может, и были бы при других настройках. Ключ -Wall там и так есть, я пробовал дополнительно выставить оптимизацию -O0. Не помогло. Возможно, ещё какие-то варианты есть, как повысить уровень детализации, и тогда, глядишь, варнинги всплыли бы.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3144
ОС: Mandriva => Gentoo (~amd64)

Re: Странно работающий QTest

Сообщение devilr »

Эту функцию можно переписать как test_data_add и она прекрасно вызовется. Или как test_add_data_x. И тоже выполнится.
Проблема тут в том, что можно банально не заметить, что какая то функция не вызвалась и пропустить проверку. И пропущенный баг уйдёт в релиз. И то, что такое поведение тянется аж от qt4 (4.8.7), не прибавляет оптимизма. Неужели, такое поведение, никто не замечает? Или просто Qt разработчики слишком ленивы, чтобы использовать авто-тестирование своих же проектов?
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Странно работающий QTest

Сообщение Hephaestus »

devilr писал(а):
07.03.2021 09:44
Эту функцию можно переписать как test_data_add и она прекрасно вызовется.
Да я её переименовал, не мудрствуя лукаво, в test_add_data2 и она вызвалась. Это понятно.
Непонятно другое: у Вас это проявляется в qt5, у меня это проявляется в qt4. Если это бага, значит, она тянется годами из версии в версию? Возможно. Но на мой взгляд маловероятно, особенно если между qt4 и qt5 были сильные различия (типа там много чего переделали). И, кстати, если есть бага такого вида, значит, и с другими функциями может быть подобное поведение? А это уже несколько серьезнее, как Вы понимаете.
Поэтому есть вариант, что это всё-таки не бага.

Кстати, я правильно понимаю, что это проявляется только в QTest? Или в обычном проекте тоже?

Если бы я искал причину такого поведения, я бы погонял трассировку минимального примера с отслеживанием в отладчике на предмет, кто кого (не)вызывает. Плюс к этому раздербанил бы процесс сборки на этапы (препроцессинг там, ассеблерный файл, объектный файл и пр.). Но я плохо знаю плюсы и совсем не знаю qt, поэтому мне анализировать будет сложно. Ну и можно глянуть исходники qt, не встречается ли там имя функции в явном виде.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3144
ОС: Mandriva => Gentoo (~amd64)

Re: Странно работающий QTest

Сообщение devilr »

Hephaestus писал:
07.03.2021 10:23
Кстати, я правильно понимаю, что это проявляется только в QTest? Или в обычном проекте тоже?
QTest используется в любом проекте, который использует тестирование. В случае с моим проектом, я просто взял минимальный проект, чтобы показать пример.

А насчёт имени... можно написать check_add_data и тоже не вызовется. Т.е. любая функция, оканчивающаяся на add_data, похоже, не вызывается (не везде, а именно в классе тестирования). Хотя, если в ней намеренно сделать ошибку, то проект не соберётся - следовательно, функция то собирается, только автоматически не вызывается.
Вообще, идея автоматически вызывать ВСЕ функции, описанные в "private slots:" лично мне кажется ущербной, но не я это придумал.
Добавлено (10:44):
Hephaestus писал:
07.03.2021 10:23
Поэтому есть вариант, что это всё-таки не бага.
Ну я не встречал "правила написания имён функций", применительно именно к QTest. :)
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

IMB
Сообщения: 2503
ОС: Debian

Re: Странно работающий QTest

Сообщение IMB »

Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3144
ОС: Mandriva => Gentoo (~amd64)

Re: Странно работающий QTest

Сообщение devilr »

IMB писал(а):
07.03.2021 11:55
Почитайте https://doc.qt.io/qt-5/qttestlib-tutorial2-example.html
Так я именно оттуда взял минимальный проект. Чтобы не заморачиваться и взять такое написание теста, которое рекомендуется разработчиками. :) И там, как раз, не оговаривается, что некоторые названия функций нельзя использовать. Проблема то в том, что если есть какие-то ограничения на названия функций, то они явно проявятся в крупном проекте, где подобных проверочных функций будет 100500. И мы в релизе будем иметь баг, который "точно проверили" на этапе отладки.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

IMB
Сообщения: 2503
ОС: Debian

Re: Странно работающий QTest

Сообщение IMB »

Тогда я не совсем понимаю что Вас удивляет, функции с суффиксом _data предназначены для подготовки данных которые потом будут тестироваться, как пример

Код: Выделить всё

..........
void WebVttTests::parserMsTest_data()
{
    QTest::addColumn<QByteArray>("content");
    QTest::addColumn<QVector<WebVtt::Parser::Frame>>("expected");

    for (const ParserTestData &item : parserMsData) {
        QTest::newRow(qUtf8Printable(item.name)) << item.data << item.result;
    }
}

void WebVttTests::parserMsTest()
{
    QFETCH(QByteArray, content);
    QFETCH(QVector<WebVtt::Parser::Frame>, expected);

    WebVtt::Parser parser;
    QCOMPARE(parser.parse(content, WebVtt::Parser::TimePrecision::WithMillisecond), expected);
}
..........
Функция WebVttTests::parserMsTest() будет выполнена для данных подготовленных ранее функцией WebVttTests::parserMsTest_data(), проще говоря - если Вы подготовили десять строчек с тестовыми данными то все они будут протестированы без написания специльных циклов.
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3144
ОС: Mandriva => Gentoo (~amd64)

Re: Странно работающий QTest

Сообщение devilr »

IMB писал(а):
07.03.2021 12:18
Тогда я не совсем понимаю что Вас удивляет, функции с суффиксом _data предназначены для подготовки данных которые потом будут тестироваться
Где это написано? Есть упоминание об этом в документации? Я про особенный "суффикс _data". Функция в проекте вполне может называться add_data и почему для проверки оной функции я не могу использовать имя test_add_data? Причём этот "запрет" не явный, но тихий. Просто проверочная функция не будет запускаться, потому что "низзя"?
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

IMB
Сообщения: 2503
ОС: Debian

Re: Странно работающий QTest

Сообщение IMB »

https://doc.qt.io/qt-5/qttestlib-tutorial2-example.html
A test function's associated data function carries the same name, appended by _data.
А говорили что читали :(

P.S. Зачем задавать здесь философские вопросы? Лучше задайте их на https://forum.qt.io/ и/или https://bugreports.qt.io/secure/Dashboard.jspa? , больше шансов получить полный ответ, если конечно он Вам нужен.
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3144
ОС: Mandriva => Gentoo (~amd64)

Re: Странно работающий QTest

Сообщение devilr »

IMB писал(а):
07.03.2021 13:11
А говорили что читали
Хм. Похоже, слона то я и не заметил. Просто это как то неявно... раньше я просто брал тестируемый класс, выбирал из него публичные функции и делал список функций для тестирования этих функций, просто прибавляя к названию функций "test_". Естественно, что эти тестовые функции имели в параметрах void и возвращали void. Так было проще.
Учитывая то, что большинство моих проектов управляли "железом", то в них явно были функции типа add_data. И, получается, что я не видел результатов проваленных тестов по этим функциям, просто потому, что они не вызывались. И, наверняка, не я один.
IMB писал(а):
07.03.2021 13:11
Зачем задавать здесь философские вопросы?
Хотя бы затем, что здесь ответят (если ответят) на русском. :) Да и с чего вы взяли, что они "философские"? Вполне себе конкретные.
А, насчёт официальных форумов - я сильно сомневаюсь, что там хоть что-то отвечают "нищебродам" без лицензии. Поэтому решил спросить здесь - баг это или нет?!
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

IMB
Сообщения: 2503
ОС: Debian

Re: Странно работающий QTest

Сообщение IMB »

Отвечают и даже баги принимаю :) На мой взгяд QtTest достаточно убог, поэтому если у Вас нет требования использовать именно его или нужды тестировать signal-slot возможно имеет смысл выбрать что-то иное.

P.S. Номер лицензии не спрашивают, ну или мне везёт.
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3144
ОС: Mandriva => Gentoo (~amd64)

Re: Странно работающий QTest

Сообщение devilr »

IMB писал(а):
07.03.2021 16:16
тестировать signal-slot
Это, как раз, активно используется. Да, этому концепту есть замена, но она не всегда (и не всем) удобна.
К тому же, если QTest предлагается самими разработчиками, то почему бы его не использовать?!

Если, описываемая мною проблема, тянется аж от Qt4, то это означает, что прикладным программистам она не мешает. Соответственно, называть это багом нет смысла.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали: