Как запустить несколько классов QTest?
У меня есть подпроект, куда я положил все своиQTest
модульные тесты и создание автономного тестового приложения, которое запускает тесты (т.е. я запускаю его из Qt Creator). У меня есть несколько тестовых классов, которые я могу выполнить сqExec()
, Однако я не знаю, как правильно выполнять несколько тестовых классов.
В настоящее время я делаю это таким образом (MVCE):
tests.proQT -= gui
QT += core \
testlib
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
TARGET = testrunner
HEADERS += test_foo.h
SOURCES += main.cpp
main.cpp#include <QtTest>
#include <QCoreApplication>
#include "test_foo.h"
int main(int argc, char** argv) {
QCoreApplication app(argc, argv);
TestFooClass testFoo;
TestBarClass testBar;
// NOTE THIS LINE IN PARTICULAR.
return QTest::qExec(&testFoo, argc, argv) || QTest::qExec(&testBar, argc, argv);
}
test_foo.h#include <QtTest>
class TestFooClass: public QObject
{
Q_OBJECT
private slots:
void test_func_foo() {};
};
class TestBarClass: public QObject
{
Q_OBJECT
private slots:
void test_func_bar() {};
};
Тем не менеедокументация дляqExec()
говорит, что это неправильный путь:
Для автономных тестовых приложений эту функцию не следует вызывать более одного раза, поскольку параметры командной строки для записи результатов теста в файлы и выполнения отдельных функций теста будут работать неправильно.
Другим важным недостатком является то, что естьнет единого резюме для всех тестовых классовТолько для индивидуальных занятий. Это проблема, когда у меня есть десятки классов, в каждом из которых есть десятки тестов. Чтобы проверить, все ли тесты пройдены, мне нужно прокрутить вверх, чтобы увидеть все «итоги» того, что было пройдено / не пройдено в каждом классе, например:
********* Start testing of TestFooClass *********
PASS : TestFooClass::initTestCase()
PASS : TestFooClass::test_func_foo()
PASS : TestFooClass::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestFooClass *********
********* Start testing of TestBarClass *********
PASS : TestBarClass::initTestCase()
PASS : TestBarClass::test_func_bar()
PASS : TestBarClass::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestBarClass *********
Я тоже удивленqExec() || qExec()
работает, учитывая, чтодокументация говорит, что если тест не пройденqExec()
возвращает ненулевое значение, которое должно означать все следующиеqExec()
звонки не будут происходить, но, похоже, это не так.
Как правильно запустить несколько тестовых классов? И так, чтобы я мог сразу увидеть, провалился ли какой-либо из сотен модульных тестов, которые у меня были.