Russian Qt Forum
Март 28, 2024, 18:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTestLib один .exe и много классов, как?  (Прочитано 3079 раз)
nvek
Гость
« : Февраль 26, 2017, 17:11 »

собсно...
насколько я знаю, для каждого цпп файла своя точка входа.. вроде..
чтобы тесты не засоряли все, надо их по разным цппшникам раскидать и не просто раскидать, а чтобы еще и фильтр работал
Записан
nvek
Гость
« Ответ #1 : Февраль 26, 2017, 18:21 »

http://www.qtcentre.org/threads/19935-How-do-you-run-multiple-test-classes оставлю это сюда, пока не потерял
Записан
nvek
Гость
« Ответ #2 : Февраль 27, 2017, 13:50 »

если кому интересно, этот хедер позволяет добавлять классы тестов
Код:
#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[]) \
 { \
  return AutoTest::run(argc, argv); \
 }

#endif // AUTOTEST_H
функция мейн в мейн.срр
Код:
#include "TestCollector.h"
#include <iostream>

TEST_MAIN
и сам тест:
Код:
#ifndef TESTS_H
#include "TestCollector.h"
#include <QTest>

class Tests : public QObject
{
Q_OBJECT
private slots:
void test1();
void test2();
};


void Tests::test1()
{

}

void Tests::test2()
{

}

DECLARE_TEST(Tests)
#include "testclas.moc"
#endif // TESTS_H
есть небольшая проблема. Экзе файл видит только один класс, или вернее методы одного класса
допустим я пишу в кмд следующее: путь\test.exe -functions
мне выдает не все функции, а функции только одного класса
что делать?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 21.