QTest
предлагает вам организовать модульные тесты в виде отдельных исполняемых файлов. Для этого есть специальный макрос, который генерирует основную функцию: QTEST_MAIN
,
Я обнаружил, что этот подход не очень чистый, гораздо полезнее запускать все тесты одновременно. Поэтому я искал, есть ли возможность сделать это, и я нашел несколько человек, предлагающих такое же решение:
Qt: запускать модульные тесты из нескольких тестовых классов и суммировать вывод всех из них
http://www.davideling.it/2014/01/qtest-multiple-unit-test-classes/
https://alexhuszagh.github.io/2016/using-qttest-effectively/
Решение было отказаться от использования QTEST_MAIN
макрос и написать свой main
Функция, в которой вы выполняете тесты, которые хотите выполнить:
int main(int argc, char *argv[])
{
int status = 0;
{
TestA ta;
status |= QTest::qExec(&ta, argc, argv);
}
{
TestB tb;
status |= QTest::qExec(&tb, argc, argv);
}
return status;
}
Я нашел это отличной идеей, однако, есть проблема. Документация Qt за qExec
есть часть, которая звучит так:
Для автономных тестовых приложений эта функция не должна вызываться
более одного раза, в качестве параметров командной строки для записи результатов теста в
файлы и выполнение отдельных тестовых функций не будут вести себя
правильно.
Решение, открытое этими людьми, предполагает следующее: выполнение qExec
больше чем единожды. Может кто-нибудь объяснить мне, что именно command-line options for logging test output to files and executing individual test functions will not behave correctly
точно значит?
Что именно может пойти не так с этим подходом?
Документация, вероятно, говорит о Параметры ведения журнала. Если вы позвоните qMain
дважды и передать -o
Для обоих вызовов второй вызов, вероятно, перезапишет файл журнала первого вызова. Если вы знаете, что этого никогда не произойдет, вы можете проигнорировать предупреждение. Вы также не можете передавать аргументы командной строки в qExec, таким образом, вы будете принудительно выводить вывод в stdout, но вы, конечно, потеряете возможность передавать другие аргументы.
Если вы хотите запустить тестовые случаи из Qt Creator, вам также не следует вызывать qExec более одного раза. Каждый тестовый класс будет отображаться в списке тестов, но запуск одного из них просто запустит все, поэтому вы получите результат для каждого класса, отображаемый для одного класса. И если вы запустите все тесты (по умолчанию), вы получите квадрат результатов.
Так что если вам не нравится подход с несколькими исполняемыми файлами, просто используйте Google Test. У него нет ни одной из вышеперечисленных проблем, и Создатель оказывает им поддержку. Настройка очень проста: мастер поможет вам при создании проекта автотеста. Единственное, что вам нужно сделать, это загрузить Google Test.
Тестовые случаи Google будут отображаться прямо рядом с тестовыми примерами Qt в представлениях тестов.
Других решений пока нет …