Как запустить модульные тесты qtestlib из QtCreator - PullRequest
5 голосов
/ 11 мая 2010

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

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

Ответы [ 4 ]

18 голосов
/ 09 октября 2010

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

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

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

5 голосов
/ 27 мая 2011

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

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();
}

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

CXXFLAGS+=-DTEST

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

4 голосов
/ 31 мая 2010

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

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

#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();
}

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

2 голосов
/ 31 мая 2010

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

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

...