|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.01.2014, 20:40 | #1 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
Пошаговая инструкция. Создание юнит-тестов (модульных тестов) на Qt C++. Разработка через тестирование (TDD - test-driven developm
Привет!
Это пошаговая инструкция для новичков разработчиков на фреймворке Qt. Принцип TDD (test-driven development) - сначала пишем тесты для пустого модуля (модуль - это функция или класс), а потом реализацию для этого модуля. Такой способ разработки позволяет: - описывать функциональность до написания самой функции - демонстрировать, что функциональность реализована, как это и требовалось (заказчику, пользователю и\или самому себе) - проводить рефакторинг (усовершенствовать код с целью оптимизации и/или для улучшения читабельности) без опасения нарушения функциональности Инструкция: - скачиваем и устанавливаем "Qt 5.2.0 for Windows 32-bit (MinGW 4.8, OpenGL, 689 MB)" http://qt-project.org/downloads - запускаем Qt Creator - если у Вас Qt Creator на русском, то я рекомендовал бы переключиться на английский. Для этого перейдите в папку: C:\Qt\Qt5.2.0\Tools\QtCreator\share \qtcreator\translations и удалить все файлы в именах которых встречается "_ru" Для примера разработаем программу, которая решает задачу: http://acmp.ru/index.asp?main=task&id_task=25 - в меню Qt Creator'а выбираем "File" -> "New File or Project..." - в разделе "Projects" выбираем "Other Project" -> во второй колонке выбираем "Qt Unit Test" - нажимаем кнопку "Choose" - в поле "Name" вводим: MyFirstUnit - нажимаем "Next" -> "Next" -> "Next" -> "Finish" - нажимаем правой кнопкой мыши по проекту в разделе "Projects" -> нажимаем "Add New...", как показано на рисунке: - в разделе "Files and Clases" выбираем "C++" -> во втором разделе выбираем "C++ Class" - нажимаем кнопку "Choose" - в поле "Class name" вводим: MyClass - нажимаем кнопку "Next" -> нажимаем кнопку "Finish" - открываем файл "myclass.h" и меняем его содержимое на следующее: myclass.h Код:
- открываем файл "myclass.cpp" и меняем его содержимое на следующее: myclass.cpp Код:
Файле "tst_myfirstunittest.cpp" нам нужно в класс "MyFirstUnitTest" добавить функцию для инициализации данных testCase1_data() (данные - это входные данные и ожидаемый результат) Ещё нам нужно написать реализацию для функций testCase1_data() и testCase1() testCase1_data() - инициализирует данные (входные данные и ожидаемый результат) testCase1() - запускает тесты, то есть производит вызовы тестируемой функции и сравнивает каждый результат вызова с соответствующим ожидаемым результатом По условию задачи, нужно написать функцию, которая возвращает: -1 - если первый аргумент меньше второе, 1 - если первый аргумент больше второе и 0 - если оба аргумента равны друг другу Напишем 10 тестов. В данном случае мы могли бы обойтись и меньшем количеством - меняем содержимое файла "tst_myfirstunittest.cpp" на следующее: tst_myfirstunittest.cpp Код:
Последний раз редактировалось Alex11223; 12.06.2018 в 22:21. |
21.01.2014, 20:42 | #2 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
- нажимаем Ctrl+R для построения и запуска программы
- в окне "Application Output" мы можем видеть, что удачно завершился только первый тест, так как функция compare() всегда возвращает ноль. Мы передали два нуля и ожидали ноль в первом тесте. Пишем функционал compare() в файле "myclass.cpp", чтобы она делала, то что мы ожидаем. С помощью тестов мы описали, что мы ожидаем от работы функции compare(). Если мы реализуем неправильно, то тесты нам это покажут. - меняем содержимое файла "myclass.cpp" на следующее: myclass.cpp Код:
Теперь мы видим, что тесты пройдены успешно: [/B]Примечание:[/B] Чтобы отформатировать код (выровнить), нужно нажать Ctrl+A (чтобы выделить), потом нажать Ctrl+I. Подробнее о TDD можно почитать здесь: ru.wikipedia.org/wiki/Разработка_через_тестирование |
22.01.2014, 10:21 | #3 |
Форумчанин
Регистрация: 11.12.2010
Сообщений: 116
|
Здравствуйте. Может вопрос не в эту ветку, извините. Раньше я не работал с QT. Установил Qt Creator.
Дохожу до места "введение и размещение проекта", выбор компонентов. Какие компоненты нужно доустановить или настроить? QtCreator 3.0 |
22.01.2014, 10:38 | #4 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
Привет! Вы хотите, чтобы здесь началась обсуждение другой темы на 10 страниц? Создайте новую тему.
|
22.01.2014, 11:30 | #5 | |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Если эта тема для обсуждения инструкции - то я уже написал "не бери тупые примеры". На хабре есть статья гораздо более высокого качества: http://habrahabr.ru/post/146449/ . И пример там похожий. Зачем читать твою статью если есть лучше?
У любого текста должна быть категория читателей. Я вот не пойму, для кого ты пишешь? Если для домохозяек - то нахрена им юнит-тесты. Если для программистов, то к чему такие детали: Цитата:
|
|
22.01.2014, 12:37 | #6 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
Я пишу для начинающих и для себя. Мне не хватало и не хватает пошаговых инструкций. Буду углубляться шаг за шагом. Пусть у меня инструкции очень простые. Зато их может легко воспроизвести новичок. А лично для меня они как памятка. Да и есть направление развития. Кроме того, у меня пошаговое мышление и такой подход для меня самый оптимальный. Я сам учусь и от меня возможно будет кому-нибудь польза. Если хотя бы одному человеку будет полезно, то я не зря трудился. А это уже выполнено, потому что одному человеку это уже стало полезно, а именно мне
На пошаговые инструкции меня вдохновило сообщество NetBeans. У них прекрасные инструкции: https://netbeans.org/kb/index_ru.html Вот бы для разработчиков на Qt такое было. Мне нравится это направление (пошаговых инструкций). Я не намерен останавливаться. Вот нравится и всё тут. Это моё хобби. О вкусах не спорят |
27.01.2014, 13:34 | #7 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
Тестирование методов класса, которые возвращают вещественные числа
Следующий пример отличается от того, что в инструкции тем, что в этом, тестируемых методов два и они возвращают вещественные числа. Тестируем методы "расчёт_прощади" "расчёт_объёма" класса "Сфера". К сожалению, в Qt нет макросов для сравнения вещественных чисел с заданной точностью, наподобие, к примеру, макроса из CppUnit (который сравнивает ожидаемый результат (expected) и результат работы функции (actual) с заданой точностью дельта (delta)): Код:
Код:
sphere.h Код:
Код:
Код:
Код:
Последний раз редактировалось 8Observer8; 28.01.2014 в 10:21. |
27.01.2014, 14:20 | #8 | |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
Цитата:
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс Последний раз редактировалось ROD; 27.01.2014 в 14:35. |
|
27.01.2014, 14:57 | #9 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
ROD, спасибо! Было бы здорово, если бы модератор там отредактировал так:
- если у Вас Qt Creator на русском, то я рекомендовал бы переключиться на английский. Для этого выбираем в меню "Инструменты" -> "Параметры..." - в окне "Параметры" слева выбираем "Среда" -> открываем вкладку "Основные" -> выбираем в выпадающем списке "English" -> нажимаем кнопку "OK" -> перезапускаем Qt Creator |
27.01.2014, 16:30 | #10 | |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
Но вместо того, чтобы спрашивать на форумах, можно поискать в ассистанте. А перед тем как утверждать, что чего-то нет, можно опять же поискать в ассистанте. Я не помню время, когда в кьют не было qFuzzyCompare. Код:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Конструктор тестов + онлайн тестирование | sereniaaa | Фриланс | 6 | 17.01.2014 23:10 |
TDD (Test-driven development) для C# (csUnit) | 8Observer8 | C# (си шарп) | 12 | 22.11.2012 13:59 |
статья - Test-Driven Development для Java(TDD, разработка через тестирование) на практике. | Pblog | Обсуждение статей | 0 | 16.06.2011 23:10 |