Russian Qt Forum

Qt => Общие вопросы => Тема начата: 8Observer8 от Февраль 11, 2014, 20:40



Название: [Решено] Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 11, 2014, 20:40
Внимание! Эта тема перетекла, в следующую тему, в шапку которой я буду добавлять изменения/добавления. Вам достаточно будет подписаться на неё. О всех измененияx/добавленияx я буду извещать: http://www.prog.org.ru/topic_26944_0.html

Привет!

Осваиваю эту технологию разработки: TDD. Писал по этому поводу небольшую пошаговую инструкцию: http://www.prog.org.ru/topic_26413_0.html

Возник следующий вопрос. Создал проект, который буду тестировать и проект, с помощью которого буду тестировать. Во втором проекте я прописал путь к классу, который хочу протестировать:

Код:
#include "../QtCalculator/calculator.h"

Заголовочный файл видим, а вот реализацию (.cpp) как подключить?


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: kambala от Февраль 11, 2014, 20:58
в .pro файле допиши хедер в HEADERS, а реализацию — в SOURCES


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 11, 2014, 21:03
Большущее спасибо!  :)


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 11, 2014, 21:30
Я вот так написал, работает:

Код:
INCLUDEPATH += "../QtCalculator/calculator.h"

SOURCES += tst_testqtcalculatortest.cpp ../QtCalculator/calculator.cpp

А если у меня метод исключение выбрасывает? Например, деление на ноль. Как мне тестить это в Qt? В CppUnit есть такой макрос:

Код:
std::vector<int> v;
CPPUNIT_ASSERT_THROW( v.at( 50 ), std::out_of_range );


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: kambala от Февраль 12, 2014, 00:14
try/catch


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 12, 2014, 10:25
try/catch

Не могу придумать, как в тесте написать проверку деления на ноль, если тесты оформлять в таком виде:

Код:
void TestQtCalculatorTest::testCaseDiv_data()
{
    QTest::addColumn<double>("arg1");
    QTest::addColumn<double>("arg2");
    QTest::addColumn<double>("expected");

    QTest::newRow("div") << 4.0 << 2.0 << 2.0;
    QTest::newRow("div") << -5.0 << 5.0 << -1.0;
    //QTest::newRow("div") << 0.0 << 0.0 << 0.0;
}

void TestQtCalculatorTest::testCaseDiv()
{
    QFETCH(double, arg1);
    QFETCH(double, arg2);
    QFETCH(double, expected);

    Calculator calc;
    double actual = calc.div(arg1, arg2);
    double delta = 0.0001;

    bool result = qFuzzyCompare(expected, actual, delta);
    QString message = QString("expected = %1; actual = %2; delta = %3;").arg(expected).arg(actual).arg(delta);
    QVERIFY2(result, message.toStdString().c_str());
}


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 12, 2014, 11:42
Возникла очень большая проблема. Как тестировать GUI если все элементы private?
Код:
private:
    Ui::Dialog *ui;

Я вижу, что единственный выход - сделать их public, чтобы можно было тестировать из другого проекта.

Взял пример из самого Qt, из папки examples/qtestlib/tutorial4 И хочу протестировать свой калькулятор.




Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: kambala от Февраль 12, 2014, 12:22
try/catch
это я поспешил — деление на 0 не выбрасывает исключение. вообще, при делении конечного ненулевого числа на 0 результатом будет бесконечность соответствующего знака, а 0/бесконечность/NaN на 0 — NaN.
Цитировать
Как тестировать GUI если все элементы private?
можно написать публичные аксессоры


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: Igors от Февраль 12, 2014, 13:03
это я поспешил — деление на 0 не выбрасывает исключение. вообще, при делении конечного ненулевого числа на 0 результатом будет бесконечность соответствующего знака, а 0/бесконечность/NaN на 0 — NaN.
Любая арифметика выдаст Nan если хоть один из аргументов Nan, т.е. размножается очень быстро. +INF и др что показывает напр MSVC не имеет самостоятельного значения - это вариант Nan'а который можно узнать с помощью fp_classify (не помню точно, обычно это не нужно).

Но все это только для флотов - целочисленная арифметика выбрасывает исключение при делении на 0   


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: Hrundel от Февраль 12, 2014, 13:23
Возникла очень большая проблема. Как тестировать GUI если все элементы private?
Я вижу, что единственный выход - сделать их public, чтобы можно было тестировать из другого проекта.

Элементы GUI для стабильных фреймворков типа MFC и Qt не тестируют. Тестируют только события которые они выполняют (on_press, on_enter etc.)


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 12, 2014, 13:37
try/catch
это я поспешил — деление на 0 не выбрасывает исключение. вообще, при делении конечного ненулевого числа на 0 результатом будет бесконечность соответствующего знака, а 0/бесконечность/NaN на 0 — NaN.

У меня метод выбрасывает исключение при попытки деления на ноль:
Код:
double Calculator::div(double a, double b) throw(std::invalid_argument)
{
    if (b != 0) {
        return a/b;
    } else {
        throw std::invalid_argument("Divide by zero");
    }
}

Как мне отлавливать это исключение в таком тесте:

Код:
void TestQtCalculatorTest::testCaseDiv_data()
{
    QTest::addColumn<double>("arg1");
    QTest::addColumn<double>("arg2");
    QTest::addColumn<double>("expected");

    QTest::newRow("div") << 4.0 << 2.0 << 2.0;
    QTest::newRow("div") << -5.0 << 5.0 << -1.0;
    //QTest::newRow("div") << 0.0 << 0.0 << 0.0;
}

void TestQtCalculatorTest::testCaseDiv()
{
    QFETCH(double, arg1);
    QFETCH(double, arg2);
    QFETCH(double, expected);

    Calculator calc;
    double actual = calc.div(arg1, arg2);
    double delta = 0.0001;

    bool result = qFuzzyCompare(expected, actual, delta);
    QString message = QString("expected = %1; actual = %2; delta = %3;").arg(expected).arg(actual).arg(delta);
    QVERIFY2(result, message.toStdString().c_str());
}

Цитировать
Как тестировать GUI если все элементы private?
можно написать публичные аксессоры

Что такое "публичные аксессоры"? Просто изменить private на public?


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 12, 2014, 13:51

В моём классе Dialog все элементы private. А я их сделал public:
Код:
public:
    Ui::Dialog *ui;

Возникла очень большая проблема. Как тестировать GUI если все элементы private?
Я вижу, что единственный выход - сделать их public, чтобы можно было тестировать из другого проекта.

Элементы GUI для стабильных фреймворков типа MFC и Qt не тестируют. Тестируют только события которые они выполняют (on_press, on_enter etc.)

Я не элементы тестирую, а хочу научиться писать пользовательские сценарии. К примеру, такие сценарии для программы "Калькулятор":

- пользователь ввёл в первый Edit: 5 -> ввёл во второй Edit: 7 -> нажал кнопку "Сложить" -> в третьем Edit'е ожидаем увидеть результат: 12
- пользователь ввёл в первый Edit: 5 -> ввёл во второй Edit: 0 -> нажал кнопку "Разделить" -> в третьем Edit'е ожидаем увидеть результат: Деление на ноль
- и т.д.


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: kambala от Февраль 12, 2014, 14:09
У меня метод выбрасывает исключение при попытки деления на ноль:
Как мне отлавливать это исключение в таком тесте:
Код
C++ (Qt)
try
{
   double actual = calc.div(arg1, arg2);
}
catch (std::invalid_argument e)
{
   // обрабатываешь исключение
}
Что такое "публичные аксессоры"? Просто изменить private на public?
пример:
Код
C++ (Qt)
class A
{
public:
   int a() const { return _a; }
private:
   int _a;
};


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 12, 2014, 14:17
Вопрос не в этом. А как это в тесте сделать? У меня ожидаемый результат это double:

Код:
QTest::addColumn<double>("expected");

Пока не соображу, как в тесте это описать.


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: kambala от Февраль 12, 2014, 14:34
http://stackoverflow.com/questions/14979011/how-to-verify-with-qtest-that-an-exception-is-thrown попробуй


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: Igors от Февраль 12, 2014, 15:03
Код
C++ (Qt)
try
{
   double actual = calc.div(arg1, arg2);
}
catch (std::invalid_argument e)
{
   // обрабатываешь исключение
}
Полагаю для флотов проще так
Код
C++ (Qt)
double actual = calc.div(arg1, arg2);
if (actual != actual)
   // обработка ошибки
 


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 12, 2014, 16:06
http://stackoverflow.com/questions/14979011/how-to-verify-with-qtest-that-an-exception-is-thrown попробуй

Спасибо!

Пытаюсь к проекту (с помощью которого тестирую) подключить класс "Dialog". В этом классе у меня калькулятор реализован.

В файле .pro
Код:
INCLUDEPATH += "../QtCalculator/dialog.h"
INCLUDEPATH += ../build-QtCalculator-Desktop_Qt_5_2_0_MinGW_32bit-Debug/ui_dialog.h

SOURCES += tst_testguiqtcalculatortest.cpp ../QtCalculator/dialog.cpp

В файле с тестами:
Код:
#include "../QtCalculator/dialog.h"
#include "../build-QtCalculator-Desktop_Qt_5_2_0_MinGW_32bit-Debug/ui_dialog.h"

Создаю экземпляр класса Dialog:
Код:
Dialog dialog;

Выдаёт ошибки:
Цитировать
D:\Documents\Qt\QtExamples\0094_QtCalculator\QtCalculator\dialog.cpp:7: error: undefined reference to `vtable for Dialog'
D:\Documents\Qt\QtExamples\0094_QtCalculator\QtCalculator\dialog.cpp:7: error: undefined reference to `vtable for Dialog'

Я что-то не так делаю. Поскажите.


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 12, 2014, 16:13
Код
C++ (Qt)
try
{
   double actual = calc.div(arg1, arg2);
}
catch (std::invalid_argument e)
{
   // обрабатываешь исключение
}
Полагаю для флотов проще так
Код
C++ (Qt)
double actual = calc.div(arg1, arg2);
if (actual != actual)
   // обработка ошибки
 


Числа double сравнивают с погрешностью, так как на копьютере они почти всегда неравны. Я с таким вариантом намучился, вроде должны совпадать точь-в-точь, а на практике они на каком-нибудь знаке будут неравны. Даже если привести из int в double.


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 12, 2014, 16:22
У меня такого же типа ошибка:

Цитировать
D:\Documents\Qt\QtExamples\0082_QNetworkAccessManager\QNetworkAccessManager\main.cpp:11: error: undefined reference to `vtable for Network'

И в этой программке:

Код:
#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QDebug>
#include <QWidget>
#include <QObject>

class Network : public QObject
{
    Q_OBJECT
public:
    Network() {}

public slots:
    void replyFinished (QNetworkReply*) {

    }
};


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Network n;

    QNetworkAccessManager *manager = new QNetworkAccessManager();
    //QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), &n, SLOT(replyFinished(QNetworkReply*)));

//    QNetworkReply* m_http = manager->get(QNetworkRequest(QUrl("http://qt-project.org")));

//    QString russian = QString::fromUtf8(m_http->readAll());

//    qDebug() << russian;

    return a.exec();
}

//#include "main.moc"

Объясните, пожалуйста!


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: Igors от Февраль 12, 2014, 16:24
Числа double сравнивают с погрешностью, так как на копьютере они почти всегда неравны. Я с таким вариантом намучился, вроде должны совпадать точь-в-точь, а на практике они на каком-нибудь знаке будут неравны. Даже если привести из int в double.
Внимательнее смотрите что с чем сравнивается выше  :)


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 12, 2014, 16:46
Числа double сравнивают с погрешностью, так как на копьютере они почти всегда неравны. Я с таким вариантом намучился, вроде должны совпадать точь-в-точь, а на практике они на каком-нибудь знаке будут неравны. Даже если привести из int в double.
Внимательнее смотрите что с чем сравнивается выше  :)

Не понял. Зачем сравнивать actual если они всегда равны?


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 12, 2014, 16:59
Почему, когда я добавляю макрос Q_OBJECT, то выдаётся ошибка:

Цитировать
D:\Documents\Qt\QtExamples\0082_QNetworkAccessManager\QNetworkAccessManager\main.cpp:11: error: undefined reference to `vtable for Network'

Код:
#include <QCoreApplication>
#include <QObject>

class Network : public QObject
{
    Q_OBJECT
public:
    Network() {}
};


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Network n;

    return a.exec();
}


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: gil9red от Февраль 12, 2014, 17:06
Почему, когда я добавляю макрос Q_OBJECT, то выдаётся ошибка:

Цитировать
D:\Documents\Qt\QtExamples\0082_QNetworkAccessManager\QNetworkAccessManager\main.cpp:11: error: undefined reference to `vtable for Network'

Код:
#include <QCoreApplication>
#include <QObject>

class Network : public QObject
{
    Q_OBJECT
public:
    Network() {}
};


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Network n;

    return a.exec();
}

В pro файл добавили QT += network?


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 12, 2014, 17:07
Почему, когда я добавляю макрос Q_OBJECT, то выдаётся ошибка:

Цитировать
D:\Documents\Qt\QtExamples\0082_QNetworkAccessManager\QNetworkAccessManager\main.cpp:11: error: undefined reference to `vtable for Network'

Код:
#include <QCoreApplication>
#include <QObject>

class Network : public QObject
{
    Q_OBJECT
public:
    Network() {}
};


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Network n;

    return a.exec();
}

В pro файл добавили QT += network?

Зачем? :)


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: Old от Февраль 12, 2014, 17:11
Почему, когда я добавляю макрос Q_OBJECT, то выдаётся ошибка:
Потому что moc не обрабатывает cpp файлы, а вы этот класс добавили в main.cpp


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: gil9red от Февраль 12, 2014, 17:14
Почему, когда я добавляю макрос Q_OBJECT, то выдаётся ошибка:

Цитировать
D:\Documents\Qt\QtExamples\0082_QNetworkAccessManager\QNetworkAccessManager\main.cpp:11: error: undefined reference to `vtable for Network'

Код:
#include <QCoreApplication>
#include <QObject>

class Network : public QObject
{
    Q_OBJECT
public:
    Network() {}
};


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Network n;

    return a.exec();
}

В pro файл добавили QT += network?

Зачем? :)

Тьфу, не до конца прочитал, думал что при использовании классов модуля QtNetwork ошибка лезет =)
Добавьте в конец main.cpp #include "main.moc" (http://winfortran.ru/qt/qt0022.php)
Только так лучше не делать, а придерживаться правила: для каждого класса свой h и cpp файлы создавать :)


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: Igors от Февраль 12, 2014, 17:14
Сначала попробую ответить на то что Вас больше волнует (missed vftable). Никакой ошибки не вижу, возможно moc файл не создан, решается очисткой и пересборкой (типа Build All). А вообще как только я вижу что-то типа "NetworkManager", то примерный  ход мысли:

- ну блин, точно сачок. Работать не хочет, щемится в веб, думает там легче проявить способности. И ведь не понимает что чем больше народу - тем хуже. Ладно, жизнь ему покажет какой там мед..

Не понял. Зачем сравнивать actual если они всегда равны?
В том-то и дело что не всегда  :)


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 12, 2014, 17:18
Добавьте в конец main.cpp #include "main.moc" (http://winfortran.ru/qt/qt0022.php)

Добавил, теперь говорит:

Цитировать
D:\Documents\Qt\QtExamples\0082_QNetworkAccessManager\QNetworkAccessManager\main.cpp:38: error: main.moc: No such file or directory
 #include "main.moc"
                    ^


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 12, 2014, 17:23
А вообще как только я вижу что-то типа "NetworkManager", то примерный  ход мысли:

- ну блин, точно сачок. Работать не хочет, щемится в веб, думает там легче проявить способности. И ведь не понимает что чем больше народу - тем хуже. Ладно, жизнь ему покажет какой там мед..

Мне нужно проработать этот список вопросов, который прислали с будущей работы:

Цитировать
Qt:
1. Деплоймент приложений, написанных с использованием Qt5.2 на Windows, Linux и других платформах.
2. Организация взаимодействия с серверными приложениями: QNetworkAccessManager, QNetworkRequest, QNetworkReply и сопутствующие классы. Поддержка SSL-соединения, деплоймент приложений с использованием SSL.
3. Обработка форматов, используемых для обмена данными в веб-приложениях (QJsonDocument, QDomDocument и сопутствующие классы).
4. Нововведения Qt5 по сравнению с Qt4.
5. Организация многопоточных приложений, механизмы взаимодействия и синхронизации потоков в приложениях на Qt.
6. Принципы работы qmake, moc, makefiles.
7. Разница между событями и сигналами/слотами.
8. Использование GDB для отладки приложений, написанных на Qt.

С++:
Понимание ООП (наследование, инкапсуляция, полиморфизм), виртуальные функции, статический и динамический полиморфизм, паттерны проектирования, структуры данных (сравнение контейнерных классов STL и Qt), практическая значимость нововведений стандарта с++11, причины утечки памяти и способы борьбы с ними.


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: Old от Февраль 12, 2014, 17:25
Мне нужно проработать этот список вопросов, который прислали с будущей работы:
Не обращайте внимания, это очередные понты... Все нужно знать и везде нужно работать. ;)


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: Igors от Февраль 12, 2014, 17:54
Мне нужно проработать этот список вопросов, который прислали с будущей работы:
Мда, грустно  :'( Понял, умолкаю


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 13, 2014, 10:59
Вижу я дал мало информации. Опишу проблему подробнее.

Я создал проект с диалоговым окном (с формой). Расположил на форме элементы и в обработчиках кнопок реализовал соответствующий функционал:

(http://i.pixs.ru/storage/1/3/2/126png_1688271_10856132.png)

Теперь хочу протестировать. Для этого создал ещё один проект так:

- в разделе "Projects" выбрал "Other Project" -> во второй колонке выбрал "Qt Unit Test"

Теперь у меня в одной директории две папки:

QtCalculator
TestGuiQtCalculator

Я взял пример из Qt, где тестируется GUI приложение:

Код:
#include <QtWidgets>
#include <QtTest/QtTest>

//! [0]
class TestGui: public QObject
{
    Q_OBJECT

private slots:
    void testGui_data();
    void testGui();
};
//! [0]

//! [1]
void TestGui::testGui_data()
{
    QTest::addColumn<QTestEventList>("events");
    QTest::addColumn<QString>("expected");

    QTestEventList list1;
    list1.addKeyClick('a');
    QTest::newRow("char") << list1 << "a";

    QTestEventList list2;
    list2.addKeyClick('a');
    list2.addKeyClick(Qt::Key_Backspace);
    QTest::newRow("there and back again") << list2 << "";
}
//! [1]

//! [2]
void TestGui::testGui()
{
    QFETCH(QTestEventList, events);
    QFETCH(QString, expected);

    QLineEdit lineEdit;

    events.simulate(&lineEdit);

    QCOMPARE(lineEdit.text(), expected);
}
//! [2]

//! [3]
QTEST_MAIN(TestGui)
#include "testgui.moc"
//! [3]


Здесь создаётся список событий и этот список применяется к элементу QLineEdit

У меня таких QLineEdit три штуки. Я тоже хочу применить список событий к ним и к кнопке. К первым двум события: нажатия клавиш с цифрами, а к кнопкам клик мыши

Проблема в том, что я не могу получить доступ к моим QLineEdit и QPushButton.

Мне нужно подключить класс Dialog. Но как это сделать. Вот как я попытался:

- открыл файл TestGuiQtCalculator.pro и добавил в него:
Код:
INCLUDEPATH += "../QtCalculator/"
INCLUDEPATH += ../build-QtCalculator-Desktop_Qt_5_2_0_MinGW_32bit-Debug/
SOURCES += tst_testguiqtcalculatortest.cpp ../QtCalculator/dialog.cpp
- открыл файл tst_testguiqtcalculatortest.cpp и добавил в него:
Код:
#include "../QtCalculator/dialog.h"
#include "../build-QtCalculator-Desktop_Qt_5_2_0_MinGW_32bit-Debug/ui_dialog.h"

Запускаю. Выдаётся ошибка:
Цитировать
D:\Documents\Qt\QtExamples\0094_QtCalculator\QtCalculator\dialog.cpp:8: error: undefined reference to `vtable for Dialog'

QtCalculator: https://github.com/8Observer8/QtCalculator (https://github.com/8Observer8/QtCalculator)
TestGuiQtCalculator: https://github.com/8Observer8/TestGuiQtCalculator (https://github.com/8Observer8/TestGuiQtCalculator)

Очень нужна помощь! Пожалуйста, помогите!


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: kambala от Февраль 13, 2014, 12:24
HEADERS += ../QtCalculator/dialog.h


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Февраль 13, 2014, 12:51
HEADERS += ../QtCalculator/dialog.h

Огромное тебе спасибо, добрый человек :)

Код:
#-------------------------------------------------
#
# Project created by QtCreator 2014-02-12T12:21:00
#
#-------------------------------------------------

QT       += testlib widgets

QT       -= gui

TARGET = tst_testguiqtcalculatortest
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


INCLUDEPATH += "../QtCalculator/"
INCLUDEPATH += ../build-QtCalculator-Desktop_Qt_5_2_0_MinGW_32bit-Debug/
HEADERS += ../QtCalculator/dialog.h
SOURCES += tst_testguiqtcalculatortest.cpp ../QtCalculator/dialog.cpp ../QtCalculator/calculator.cpp
DEFINES += SRCDIR=\\\"$$PWD/\\\"


Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Апрель 07, 2014, 11:58
Я оформил хороший пример по этой теме. См. первое сообщение по следующей ссылке; пример называется "Пример разработки ПО через тестирование" (это в конце инструкции): http://www.prog.org.ru/topic_26413_0.html


Название: Re: [Решено] Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Апрель 30, 2014, 06:52
Фреймворк QTest не поддерживает ни тестирование исключений, ни сравнение вещественных результатов, ни Mock-объектов. Здесь инструкция по самому продвинутому TDD-фреймворку на C++ - http://www.prog.org.ru/topic_26944_0.html


Название: Re: [Решено] Разработка ПО на Qt через тестирование (Test-Driven Development)
Отправлено: 8Observer8 от Июнь 26, 2014, 09:01
В шапку темы добавил текст:

Внимание! Эта тема перетекла, в следующую тему, в шапку которой я буду добавлять изменения/добавления. Вам достаточно будет подписаться на неё. О всех измененияx/добавленияx я буду извещать: http://www.prog.org.ru/topic_26944_0.html