Название: QTestLib как организовать тесты?
Отправлено: deMax от Июнь 14, 2017, 11:06
Как лучше организовать тесты?
Есть тесты, каждый тест отдельный .cpp файл без .h файла. Можно ли при помощи одного pro файла каждый тест собрать в отдельный файл? Можно ли все тесты засунуть в один исполняемый файл не используя .h файлы?
Название: Re: QTestLib как организовать тесты?
Отправлено: nvek от Июль 12, 2017, 06:40
да можно, так сделать, чтобы все тесты запускались в одном екзешнике для этого надо добавить еще один класс: #ifndef AUTOTEST_H #define AUTOTEST_H
#include <QTest> #include <QList> #include <QString> #include <QSharedPointer>
namespace AutoTest { typedef QList<QObject*> TestList;
inline TestList& testList() { static TestList list; return list; }
inline bool findObject(QObject* object) { TestList& list = testList(); if (list.contains(object)) { return true; } foreach(QObject* test, list) { if (test->objectName() == object->objectName()) { return true; } } return false; }
inline void addTest(QObject* object) { TestList& list = testList(); if (!findObject(object)) { list.append(object); } }
inline int run(int argc, char *argv[]) { int ret = 0;
foreach(QObject* test, testList()) { ret += QTest::qExec(test, argc, argv); }
return ret; } }
template <class T> class Test { public: QSharedPointer<T> child;
Test(const QString& name) : child(new T) { child->setObjectName(name); AutoTest::addTest(child.data()); } };
#define DECLARE_TEST(className) static Test<className> t(#className);
#define TEST_MAIN \ int main(int argc, char *argv[]) \ { \ QApplication app(argc, argv); \ return AutoTest::run(argc, argv); \ }
#endif //
и в своем тесте в конце например DECLARE_TEST(test) #include "test.moc" мог что то упустить, давно не собирал тесты)
Название: Re: QTestLib как организовать тесты?
Отправлено: nvek от Июль 12, 2017, 06:41
один минус, нельзя запустить отдельный тест с помощью ключа
|