Относится к ответу @ cjhuitt
Это пример, который устраняет необходимость вручную вызывать каждый тестовый объект
Я стараюсь избегать вещей, подобных этому:
MyTestClass1 t1; t1.run();
MyTestClass2 t2; t2.run();
//etc...
Мое решение - позволить тестовым объектам наследовать от базового класса, который добавляет себя в статический список
Затем основная программа выполняет все тестовые объекты в этом списке. Таким образом, ни один из кодов вспомогательной платформы не нужно менять. Меняются только сами тестовые классы.
Вот как я это делаю:
qtestsuite.h - базовый класс для тестовых объектов
#ifndef QTESTSUITE_H
#define QTESTSUITE_H
#include <QObject>
#include <vector>
class QTestSuite : public QObject
{
Q_OBJECT
public:
static std::vector<QObject*> m_suites;
public:
explicit QTestSuite();
};
#endif // QTESTSUITE_H
qtestsuite.cpp
#include "qtestsuite.h"
#include <iostream>
std::vector<QObject*> QTestSuite::m_suites;
QTestSuite::QTestSuite() : QObject()
{
m_suites.push_back(this);
}
testall.cpp - запускает тесты
#include "qtestsuite.h"
#include <QtTest/QtTest>
#include <iostream>
int main(int, char**)
{
int failedSuitesCount = 0;
std::vector<QObject*>::iterator iSuite;
for (iSuite = QTestSuite::m_suites.begin(); iSuite != QTestSuite::m_suites.end(); iSuite++)
{
int result = QTest::qExec(*iSuite);
if (result != 0)
{
failedSuitesCount++;
}
}
return failedSuitesCount;
}
mytestsuite1.cpp - пример тестового объекта, создайте больше таких
#include "qtestsuite.h"
#include <QtTest/QtTest>
class MyTestSuite1: public QTestSuite
{
Q_OBJECT
private slots:
void aTestFunction();
void anotherTestFunction();
};
void MyTestSuite1::aTestFunction()
{
QString str = "Hello";
QVERIFY(str.toUpper() == "this will fail");
}
void MyTestSuite1::anotherTestFunction()
{
QString str = "Goodbye";
QVERIFY(str.toUpper() == "GOODBYE");
}
static MyTestSuite1 instance; //This is where this particular test is instantiated, and thus added to the static list of test suites
#include "mytestsuite1.moc"
также для создания .pro-файла
qmake -project "CONFIG += qtestlib"