|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.01.2013, 19:59 | #1 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,324
|
CppUnit. Разработка ПО на C++ через тестирование
Приветствую, дорогие друзья!
В этой пошаговой инструкции опишу разработку ПО на С++ через тестирование на Window 7 в среде NetBeans 7.2 Данная инструкция базируется на следующих: - Adding Unit Tests to a C Project - NetBeans IDE Tutorial http://netbeans.org/kb/docs/cnd/c-unit-test.html - CND69UnitTests http://wiki.netbeans.org/CND69UnitTests Прежде чем устанавливать CppUnit, нужно установить MinGW и MSYS. Установка MinGW Инструкция базируется на: 1) MinGW Compilers and Tools http://netbeans.org/community/releas...ons.html#mingw 2) сообщения от ysim из темы http://forums.netbeans.org/topic33206.html - скачиваем MinGW: http://sourceforge.net/projects/mingw/ - устанавливаем MinGW. При установке выбираем: -- 'C++ Compiler' -- все остальные настройки установки - поумолчанию (путь установки оставить 'C:\MinGW') - добавляем в переменную окружение PATH следующий путь: 'C:\MinGW\bin' Установка MSYS - скачиваем MSYS http://sourceforge.net/projects/ming...e_mirror=ignum - устанавливаем MSYS. Во время установки нужно дать два положительный ответа (ввести y) и ввести путь к MinGW (c:/MinGW) Установка CppUnit - скачиваем CppUnit: http://sourceforge.net/projects/cppu...ar.gz/download - копируем в домашний каталог MSYS скаченный архив 'cppunit-1.12.1.tar.gz' (в моём случае в 'C:\MinGW\msys\1.0\home\Ivan') - запускаем 'C:\msys\1.0\msys.bat' - в открывшемся терминале вводим команды: tar -zxvf cppunit-1.12.1.tar.gz cd cppunit-1.12.1 ./configure make make install - копируем файл 'libcppunit.a' из каталога 'C:\msys\1.0\local\lib' в каталог 'C:\MinGW\lib' Установка NetBeans - скачиваем и устанавливаем Java Development Kit (JDK): http://www.oracle.com/technetwork/ja...ads/index.html - скачиваем и устанавливаем NetBeans C/C++: http://netbeans.org/downloads/index.html Последний раз редактировалось 8Observer8; 21.01.2013 в 20:17. Причина: орфография |
21.01.2013, 20:01 | #2 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,324
|
Пример разработки ПО
Создание нового проекта в NetBeans и "функций-заглушек" для разрабатываемого класса
- запускаем NetBeans - создаём новый проект. Для этого: в меню File выбираем New Project... -> C/C++ Application -> вводим имя проекта Sphere -> нажимаем кнопку Finish - создаём class. Для этого: ПКМ (правая кнопка мыши) по проекту Sphere (на панели Projects слева) -> New -> C++ Class... -> вводим название класса Sphere -> нажимаем кнопку Finish - код класса. Создаём "функции-заглушки". Все файлы проекта: main.cpp Код:
Код:
Код:
- создаём файлы с тестами. Для этого: ПКМ по файлу 'Sphere.cpp' -> выбираем Create Test -> выбираем New CppUnit Test... -> ставим галочки напротив функций calcArea() и calcVolume() -> нажимаем кнопку Next -> нажимаем кнопку Finish - подключаем инклуды. Для этого ПКМ по каталогу Test Files -> выбираем Properties -> в открывшемся окне, слева выбираем C++ Compiler -> справа, в поле Include Directories, указываем путь 'C:\msys\1.0\local\include' (при выборе пути, я выбрал абсолютный путь) - устанавливаем ожидаемый результат и пишем функцию сравнения. Для этого заменяем фрагмент в файле 'newtestclass.cpp': Код:
Код:
Последний раз редактировалось 8Observer8; 21.01.2013 в 20:13. Причина: орфография |
21.01.2013, 20:02 | #3 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,324
|
Запуск тестов
- запускаем тесты. Для этого: в меню выбираем Run -> выбираем Test Project (Sphere) Результаты тестирования "функций-заглушек" - смотрим на результаты тестирования. Ни один тест не дал положительного результата. Так как функции вернули нам нули. Как следствие, ожидаемые результаты не совпали с результатами работы функций: calcArea() и calcVolume() Реализация функционала "функций-заглушек" разрабатываемого класса - pеализуем функционал (я намеренно сделал ошибку в функции расчёта объёма: надо возводить в куб, а не в квадрат) Sphere.cpp Код:
- запускаем тесты (Alt+F6) - видим, что в одной из функций допущена ошибка. Ожидаемый результат не совпал с результатом работы функции - исправляем ошибку: Sphere.cpp Код:
Класс готов к использованию! Далее бонус. Сохраняем файлы проекта в Git репозитарий - выбираем в меню Team -> выбираем Git -> выбираем Initialize -> выбираем путь - выделяем файлы проекта -> выбираем в меню Team -> выбираем Commit... - в поле Commit Message вводим текст (описание изменений и/или исправлений ошибок) - в поле Author пишем автора проекта - в поле Commiter пишем, кем внесены изменения в проект - отмечаем файлы в которые внесены изменения - нажимаем кнопку Commit О возможностях Git в NetBeans можно почитать по следующей ссылке (на примере java проекта): Git User Guide - NetBeans IDE Tutorial http://netbeans.org/kb/docs/ide/git.html Последний раз редактировалось 8Observer8; 21.01.2013 в 20:21. Причина: орфография |
21.01.2013, 23:10 | #4 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,324
|
Добавление тестов
- открываем файл 'newtestclass.h' и добавляем тесты: newtestclass.h Код:
newtestclass.cpp Код:
|
22.01.2013, 08:49 | #5 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Извиняюсь за оффтоп.
хорошо, конечно, что ты такие большие (наверное интересные) посты пишешь.. но, думаю, лучше было бы помещать их сюда: http://pblog.ru/ мне кажется, это тот же programmersforum, но более подходящий тебе формат. |
27.08.2013, 23:30 | #6 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,324
|
Сложение двух чисел. Пример с исключениями
Задание. Написать функцию для сложения двух целых чисел. Первое число из диапазона [5, 10]. Второе число из диапазона [20, 30]. Если эти числа выходят за диапазон, то генерируем исключение. Функцию реализовать с использованием методологии TDD (сначала тесты - потом реализация) Создаём новый проект в NetBeans. - File -> New Project... -> C/C++ && C/C++ Application - нажимаем кнопку Next - в поле Project Name вводим имя проекта, к примеру: Sum - нажимаем кнопку Finish Создаём заглушку для разрабатываемой функции. - в файле main.сpp пишем: main.cpp Код:
Создаём тестовую площадку. - нажимаем правой кнопкой мыши по файлу main.cpp - выбираем Create Test -> New CppUnit Test - ставим галочку перед sum(int, int) - нажимаем кнопку Next - нажимаем кнопку Finish Указываем путь к заголовочным файлам и файлу библиотеки CppUnit. - выбираем File -> Project Properties (имя проекта) - выбираем C++ Compiler - в поле Include Directories указываем путь к папке include CppUnit. В моём случае: C:/cppUnit/include - выбираем Linker -> в поле Libraries указываем путь к библиотеке CppUnit (при добавлении откроется окно, где нужно будет нажать Add Library) - нажимаем кнопку OK Создаём несколько тестов. - находим в файле newtestclass.cpp следующий код: Код:
- меняем его на следующий: Код:
Код:
Код:
newtestclass.h Код:
- видим красную полосу (0% выполненных тестов; чтобы увидеть красную полосу - активируем окно редактора). Теперь наша задача сделать полосу зелёной (100% выполненных тестов). Реализация разрабатываемой функции. - реализуем функционал (частично): Код:
- видим, что красная полоса уменьшилась. Идём дальше - реализуем функционал: Код:
- полоса стала зелёной! Задача выполнена! Последний раз редактировалось 8Observer8; 27.08.2013 в 23:35. |
27.08.2013, 23:32 | #7 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,324
|
Для реализаций функций нужно с помощью тестов описывать весь функционал (насколько это возможно). Когда функционал реализован (полоса полностью зелёного цвета) - можно приступить к рефакторингу (к улучшению кода), тогда тесты будут на страже нашего функционала. Мы будем уверены, что если мы испортим случайно функционал, то тесты нам это покажут (полоса перестанет быть полностью зелёной).
|
28.08.2013, 22:09 | #8 |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
Полезно. Спасибо :-)
|
28.08.2013, 22:17 | #9 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,324
|
|
28.08.2013, 23:11 | #10 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
тема интересная, только инструмент выбран неподходящий. CppUnit уже безнадежно устарел, и заброшен самими авторами. Трупик, короче.
По сравнению с GoogleTest, количество ненужного синтаксического мусора чтобы создать 1 тест, у CppUnit примерно в 3(!) раза больше. к обоим фреймворкам можно добавлять расширения, чтобы сравнивать в ассертах свои типы данных с подробной распечаткой экспектов, но у Google больше матчеров в комплекте. Ну и естессно у Гоогле есть GoogleMock - охренительная вещь- тут и CppUnit и Boost.Test в полном обломе.
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разработка, отладка, тестирование и документирование программ на Паскале | Химия | Помощь студентам | 0 | 18.12.2011 23:19 |
статья - Test-Driven Development для Java(TDD, разработка через тестирование) на практике. | Pblog | Обсуждение статей | 0 | 16.06.2011 23:10 |
Пользование cppunit? | mike_tihomirov | Общие вопросы C/C++ | 0 | 15.04.2010 23:56 |
Тесты CPPUNIT | Lazio | Помощь студентам | 0 | 13.12.2009 13:18 |
Разработка тестов CPPUNIT | Lazio | Фриланс | 1 | 11.12.2009 00:55 |