Название: [Решено] Разработка ПО на 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" А если у меня метод исключение выбрасывает? Например, деление на ноль. Как мне тестить это в Qt? В CppUnit есть такой макрос: Код: std::vector<int> v; Название: 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() Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development) Отправлено: 8Observer8 от Февраль 12, 2014, 11:42 Возникла очень большая проблема. Как тестировать GUI если все элементы private?
Код: private: Я вижу, что единственный выход - сделать их 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) Как мне отлавливать это исключение в таком тесте: Код: void TestQtCalculatorTest::testCaseDiv_data() Цитировать Как тестировать GUI если все элементы private? можно написать публичные аксессорыЧто такое "публичные аксессоры"? Просто изменить private на public? Название: Re: Разработка ПО на Qt через тестирование (Test-Driven Development) Отправлено: 8Observer8 от Февраль 12, 2014, 13:51 В моём классе Dialog все элементы private. А я их сделал public: Код: public: Возникла очень большая проблема. Как тестировать 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 У меня метод выбрасывает исключение при попытки деления на ноль: Как мне отлавливать это исключение в таком тесте: Код
Что такое "публичные аксессоры"? Просто изменить private на public? пример:Код
Название: 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 Код
Код
Название: 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" В файле с тестами: Код: #include "../QtCalculator/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 Код
Код
Числа 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> Объясните, пожалуйста! Название: 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> Название: 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> В 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> В 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> В 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> Здесь создаётся список событий и этот список применяется к элементу QLineEdit У меня таких QLineEdit три штуки. Я тоже хочу применить список событий к ним и к кнопке. К первым двум события: нажатия клавиш с цифрами, а к кнопкам клик мыши Проблема в том, что я не могу получить доступ к моим QLineEdit и QPushButton. Мне нужно подключить класс Dialog. Но как это сделать. Вот как я попытался: - открыл файл TestGuiQtCalculator.pro и добавил в него: Код: INCLUDEPATH += "../QtCalculator/" Код: #include "../QtCalculator/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 Огромное тебе спасибо, добрый человек :) Код: #------------------------------------------------- Название: 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 |