Задать вопрос
Kalombyr
@Kalombyr

Unittests в Qt, как правильно организовать структуру проекта?

Доброго дня!
Есть основной проект ProjectName, в нём используются подпроекты.
Решил сделать тестирование через qtest, соответственно создаю новый подпроект Tests, в визарде выбираю шаблон Unit test Qt, появляется скелет теста.
И тут начинаются проблемы.
1. Прожимаю запуск - запускается только тест и всё... Эм, я как бы хотел запуск приложения, а тесты запускать по команде из менюшки "Инструменты"... Запускается основное приложение только по запуску из подменюшки в дереве проекта
2. Хочу сделать тестирование следующего класса - создаю новый класс в Tests, называю по аналогии tst_myclass.cpp, прописываю остальное по аналогии,
при запуске ошибка "multiple definition of `main'", гуглю как работают тесты, выясняю, что макрос QTEST_MAIN создаёт функцию main(), убираю во втором классе этот макрос, запускаю, тестируется лишь один, первый класс.
Смотрю реализацию макроса QTEST_MAIN, и вижу, что запускается тест лишь указанного в параметрах макроса. Как его заставить тестировать остальные классы, без ручного указания классов в QTest::qExec()?
  • Вопрос задан
  • 1281 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@res2001
Developer, ex-admin
Вообще то юнит тесты (модульные тесты) не предназначены для встраивания в приложение. Тест это отдельное приложение, предназначенное для тестирования компонентов (функций, классов и т.п.) основного приложения. Обычно тесты не входят в состав релиза приложения (я не говорю сейчас про приложения распространяемые в исходниках, в этом случае тесты часто идут в составе).
Что бы сделать то что вы хотите, просто пишите тест как часть приложения, без использования библиотек предназначенных для модульных тестов. Это будет быстрее.
В принципе, что-то можно использовать из них с учетом того, что большая их часть выводит информацию на консоль, создает свою функцию main, ... Т.е. что-бы использовать их не по назначению нужно хорошо знать внутреннюю организацию и понимать как оно работает.
Ответ написан
@Ariox41
Каждый набор тестов в QTest обычно создается как отдельный подпроект (приложение). Соответственно, и запускаются тесты как отдельное приложения. Выбор текущего активного проекта для запуска в QtCreator осуществляется через панель "проекты" слева, или по "ctrl + T", это относится и к тестам. В принципе, тесты можно сосредоточить и в одном проекте, но это крайне неудобно как раз из-за проблемы, с которой вы столкнулись. Для такой конфигурации лучше подходит Catch. QtCreator вроде бы умеет запускать все тесты одновременно, но я этим не пользовался.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы