XP.Party (iOS) - unit tests frameworks overview
-
Upload
katkov-anton -
Category
Documents
-
view
798 -
download
1
Transcript of XP.Party (iOS) - unit tests frameworks overview
Test Frameworks overview
Инженерные практики в iOS: Unit Tests
● Виталий Ружников○ iOS-фрилансер○ Руководитель разработки мобильных проектов
● Антон Катков
○ Тренер по инженерным практикам○ Директор, руководитель проектов, iOS-
разработчик
О нас
Roadmap
● Unit Tests● OCUnit● Google Toolbox for Mac (GTM)● GHUnit● Рекоммендации
Unit Test
● Проверка компонента, что он ведет себя так, как ожидает этого программист;
● Компонентом может быть функция или класс.
Unit Test
● Не обращается к базе данных● Не лезет в сеть● Не обращается к файловой системе● Для их выполнения приходится
специально настраивать среду, например, править конфигурационные файлы.
● Выполняются быстро(очень очень быстро, тест, выполняющийся 1/10 сек, медленный тест)
Интеграционные
● Все остальное
Критерии
● Легкость подключения, написания и запуска тестов;
● Сообщения об ошибках в тестах;● Возможность отладки;● Интеграция с IDE(XCode 4.x, XCode 3.x,
AppCode);● Запуск тестов из коммандой строки(для
регулярного прогона на сервере непрерывной интеграции);
OCUnit - Подключение
● Из коробки (галочку поставить при создании проекта);
● Либо добавить unit test target к существующему проекту;
OCUnit - Пишем тесты
● Наследуемся от SenTestCase● -(void)testMyTestNameGoesHere{}● STAssertEquals● STAssertEqualsWithAccuracy● STAssertEqualObjects● STAssertThrows
OCUnit - Запуск, товарищи!
● Logic tests запускаются только на симуляторе○ XCode 4 - Схема 'Test' для запуска○ XCode 3 - выбрать таргет тестов○ Можно редактировать какие тесты запускать,
отредактировав схему● Application tests - и на девайсе и на
симуляторе○ Использовать 'Run' scheme для запуска○ Прогоняются все тесты
Демо
OCUnit - Сообщение об ошибках
● Номера строчек в коде и сообщения об ошибке
● Есть возможность генерации JUnit-подобных отчетов:○ https://github.
com/hborders/BPOCUnitXMLReporter
OCUnit - Отладка
● XCode 4 - Добавляем брейкпойнт и вперед
● XCode 3 - Излазить гугл и пройти нетривиальную инструкцию
OCUnit - Поддержка в IDE
● Свалившиеся тесты представлены в issue навигаторе.
● Application Tests - только сообщения в консоли.
OCUnit - Запуск из командной строки
● Используем команду xcodebuild○ xcodebuild -target UnitTests -configuration
Debug -sdk iphonesimulator5.0 clean build
GTM Подключение
● Проходим инструкцию http://code.google.
com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting ● Тесты по существу запускаются из
коммандной строки● Нет искусственного разграничения на
logic и application тесты
GTM - Пишем тесты
● Наследуемся от GTMTestCase
● -(void)testMyTestNameGoesHere {}● Assertations совместимы с теми, что в
OCUnit!● STAssertEqualStrings
GTM - Запуск
● И на девайсе и на симуляторе● Нельзя выборочный запуск тестов делать
GTM - Сообщения об ошибках
● Практически такое же как в OCUnit;● Нет информации о возможности
генерации JUnit подобных отчетов;
GTM - Debugging
● Включаем галочку 'Run script only when installing'○ Если не включить, то запуск тестов будет
проводиться на этапе компиляции● Ставим брейкпойнт и запускаем тестовый
таргет
GTM - XCode Integration
● На этапе компиляции ошибки видны в issue навигаторе и редакторе кода
● При пригоне после установки на симуляторе ищем сообщения об ошибках в консоли
GTM - Запуск из командной строки
● Ничем не отличается от OCUnit, но не забываем снять галочку с "Run script only when installing"
GHUnit - Плюшки
● Асинхронные тест кейсы● Ассерты с картинками вьюшек● Выбор отдельных тестов● Мокирование NSUrlConnection
GHUnit - Подлючение
● Проходим по шагам инструкцию
http://gabriel.github.com/gh-unit/docs/appledoc_include/guide_install_ios_4.html
● Нужен отдельный таргет● Тесты запускаются в отдельном
приложении
GHUnit - Пишем тесты
● Наследуемся от GHTestCase● -(void)testMyTestNameGoesHere { }● Assertations практически теже самые,
только префикс GH(GHAssertTrue...).
● Запуск на девайсе и в симуляторе(после некоторых махинаций)
● Тесты запускаются внутри отдельного ios приложения
● Можно выбирать какие тесты запускать● Приложение может упасть, если будет
unexpected exception
GHUnit - Запуск
GHUnit - Отчеты об ошибках
● Стек трейсы, номера строк, текстовое описание ошибки
● Отчеты об ошибках могут быть представлены в junit формате○ WRITE_JUNIT_XML=YES
GHUnit - Отладка
● Добавляем брейкпойнт● Собираем и запускаем тестовое
приложение
GHUnit - Ide Integration
● Отсутствует
GHUnit - Command Line
● Проходим инструкцию http://gabriel.github.com/gh-unit/docs/appledoc_include/guide_command_line.html
● Для тех кому лень:○ xcodebuild -target Tests -configuration Debug -sdk
iphonesimulator5.0 clean build GHUNIT_CLI=1 WRITE_JUNIT_XML=1
Best Practices
● Отдельный таргет на юнит тесты;● Отдельный таргет на интеграционные
тесты;● Отдельный на медленные;● Отдельный на performance...
Final Recommendations
● Unit Tests XCode 4 - OCUnit● Unit Tests XCode 3 - GTM ● GHUnit - для интеграционных тестов
Контакты
● Виталий Ружников○ [email protected]○ Twitter: @ruzhnikov○ Skype: viruzh
● Антон Катков
○ [email protected]○ Twitter: @Vanger_cat○ Skype: anton.katkov