Как запустить модульные тесты qtestlib из QtCreator

Я разрабатываю приложение с графическим интерфейсом в Qt Creator и хочу написать для него несколько модульных тестов.

Я выполнил это руководство, чтобы выполнить несколько модульных тестов с помощью QtTestlib, и программа отлично компилируется. Но как мне их запустить? Я хотел бы, чтобы они запускались до запуска приложения с графическим интерфейсом, если сборка отладки и не запускалась, если сборка выпуска.


person Viesturs    schedule 11.05.2010    source источник


Ответы (4)


Не помещайте тестовый код в свой основной проект. Вы должны создать отдельный проект для своих модульных тестов, а затем собрать и запустить его. Не изменяйте свой основной проект для запуска тестов.

В идеале у вас должен быть настроен сервер сборки, который будет автоматически вызывать ваш проект модульного тестирования и собирать ваши выпуски. Вы можете заскриптовать это.

Никогда не взламывайте основное приложение для запуска модульных тестов. Если вам нужно выполнить тестирование на уровне интеграции (т. е. проверить, как программа работает после того, как она полностью скомпилирована и интегрирована), вы должны использовать другую среду для тестирования интеграции, которая позволяет вам тестировать программу из внешнего источника со сценарием. Одним из таких фреймворков является Squish от FrogLogic.

person James Oltmans    schedule 08.10.2010
comment
Привет, Джеймс. Допустим, у меня есть приложение с кучей пунктов меню. Каждый пункт меню при нажатии показывает форму. Как сделать модульный тест, который щелкает каждый элемент списка меню и проверяет, отображается ли правильная форма? - person Owen; 17.11.2010
comment
Вы не можете сделать модульный тест для этого. Вам нужно что-то вроде Squish от FrogLogic для проведения такого интегрированного тестирования. Модульное тестирование — это гораздо более низкий уровень, чем тестирование пользовательского интерфейса. По крайней мере, я так понимаю, что это работает. Если вы обнаружите, что можете делать такие вещи, я хотел бы знать, но все, что я читал, говорило, что это неправильное использование модульного тестирования. - person James Oltmans; 19.11.2010

Для этого используйте несколько целей и флаги препроцессора:

int main(int argv, char *args[])
{
#ifdef TEST
    ::TestsClas::runTests();
#endif
    QApplication app(argv, args);
    MainWindow mainWindow;
    mainWindow.setGeometry(100, 100, 800, 500);
    mainWindow.show();

    return app.exec();
}

Затем перейдите на панель проектов и добавьте новую цель «Тест», продублировав «Отладка». В разделе «Шаги сборки» добавьте аргумент «Создать».

CXXFLAGS+=-DTEST

Таким образом, тест включается в цель Test, но не в цели Debug или Release.

person aqua    schedule 27.05.2011
comment
Это не позволяет просматривать и запускать тесты в Qt Creator IDE. - person aviit; 12.08.2020

Наконец-то разобрался, как запускать тесты перед запуском приложения.

Я добавил один статический метод в класс тестов для запуска тестов:

#include <QtTest/QtTest>

TestClass::runTests()
{
    TestClass * test = new TestClass();

    QTest::qExec(test);
    delete test;
}

В основной функции выполните:

int main(int argv, char *args[])
{
    ::TestsClas::runTests();

    QApplication app(argv, args);
    MainWindow mainWindow;
    mainWindow.setGeometry(100, 100, 800, 500);
    mainWindow.show();

    return app.exec();
}

Результаты теста распечатываются в окне вывода приложения.

person Viesturs    schedule 31.05.2010
comment
Вы не хотите загрязнять основное приложение тестовым кодом. - person jkyle; 15.04.2011

В настоящее время Qt Creator явно не поддерживает выполнение модульных тестов (до Qt Creator 2.0beta). Поэтому пока вам нужно будет запускать тесты вручную.

Если вы используете систему сборки, такую ​​как cmake, вместо qmake, вы можете попробовать запускать модульные тесты автоматически как часть самого процесса сборки. К сожалению, я не знаю ни одного способа сделать это с помощью qmake. CMake поддерживается создателем Qt, хотя и не так хорошо, как qmake.

person Tobias Hunger    schedule 31.05.2010
comment
Лично я считаю поддержку cmake довольно хорошей. Я даже использую CTEST для пакетного запуска классов модульного тестирования QTEST через Creator. в пользовательской конфигурации сборки. - person jkyle; 15.04.2011