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

StackOverflow https://stackoverflow.com/questions/2809028

  •  25-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение 3

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

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

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

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

Другие советы

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

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

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

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

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

Таким образом, тест включен в тестовую цель, но не отладки или цели освобождения.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top