AgileCamp'11 Новосибирск - введение в инженерные практики
XP.Party (iOS) - unit tests frameworks overview
1. Test Frameworks
overview
Инженерные практики в iOS: Unit Tests
2. О нас
● Виталий Ружников
○ iOS-фрилансер
○ Руководитель разработки мобильных проектов
● Антон Катков
○ Тренер по инженерным практикам
○ Директор, руководитель проектов, iOS-
разработчик
3. Roadmap
● Unit Tests
● OCUnit
● Google Toolbox for Mac (GTM)
● GHUnit
● Рекоммендации
4. Unit Test
● Проверка компонента, что он ведет себя
так, как ожидает этого программист;
● Компонентом может быть функция или
класс.
5. Unit Test
● Не обращается к базе данных
● Не лезет в сеть
● Не обращается к файловой системе
● Для их выполнения приходится
специально настраивать среду,
например, править конфигурационные
файлы.
● Выполняются быстро(очень очень
быстро, тест, выполняющийся 1/10 сек,
медленный тест)
7. Критерии
● Легкость подключения, написания и
запуска тестов;
● Сообщения об ошибках в тестах;
● Возможность отладки;
● Интеграция с IDE(XCode 4.x, XCode 3.x,
AppCode);
● Запуск тестов из коммандой строки(для
регулярного прогона на сервере
непрерывной интеграции);
8. OCUnit - Подключение
● Из коробки (галочку поставить при
создании проекта);
● Либо добавить unit test target к
существующему проекту;
10. OCUnit - Запуск, товарищи!
● Logic tests запускаются только на
симуляторе
○ XCode 4 - Схема 'Test' для запуска
○ XCode 3 - выбрать таргет тестов
○ Можно редактировать какие тесты запускать,
отредактировав схему
● Application tests - и на девайсе и на
симуляторе
○ Использовать 'Run' scheme для запуска
○ Прогоняются все тесты
12. OCUnit - Сообщение об ошибках
● Номера строчек в коде и сообщения об
ошибке
● Есть возможность генерации JUnit-
подобных отчетов:
○ https://github.
com/hborders/BPOCUnitXMLReporter
13. OCUnit - Отладка
● XCode 4 - Добавляем брейкпойнт и
вперед
● XCode 3 - Излазить гугл и пройти
нетривиальную инструкцию
14. OCUnit - Поддержка в IDE
● Свалившиеся тесты представлены в issue
навигаторе.
● Application Tests - только сообщения в
консоли.
16. GTM Подключение
● Проходим инструкцию http://code.google.
com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting
● Тесты по существу запускаются из
коммандной строки
● Нет искусственного разграничения на
logic и application тесты
17. GTM - Пишем тесты
● Наследуемся от GTMTestCase
● -(void)testMyTestNameGoesHere {}
● Assertations совместимы с теми, что в
OCUnit!
● STAssertEqualStrings
18. GTM - Запуск
● И на девайсе и на симуляторе
● Нельзя выборочный запуск тестов делать
19. GTM - Сообщения об ошибках
● Практически такое же как в OCUnit;
● Нет информации о возможности
генерации JUnit подобных отчетов;
20. GTM - Debugging
● Включаем галочку 'Run script only when
installing'
○ Если не включить, то запуск тестов будет
проводиться на этапе компиляции
● Ставим брейкпойнт и запускаем тестовый
таргет
21. GTM - XCode Integration
● На этапе компиляции ошибки видны в
issue навигаторе и редакторе кода
● При пригоне после установки на
симуляторе ищем сообщения об
ошибках в консоли
22. GTM - Запуск из командной строки
● Ничем не отличается от OCUnit, но не
забываем снять галочку с "Run script only
when installing"
23. GHUnit - Плюшки
● Асинхронные тест кейсы
● Ассерты с картинками вьюшек
● Выбор отдельных тестов
● Мокирование NSUrlConnection
24. GHUnit - Подлючение
● Проходим по шагам инструкцию
http://gabriel.github.com/gh-
unit/docs/appledoc_include/guide_install_ios_4.html
● Нужен отдельный таргет
● Тесты запускаются в отдельном
приложении
25. GHUnit - Пишем тесты
● Наследуемся от GHTestCase
● -(void)testMyTestNameGoesHere { }
● Assertations практически теже самые,
только префикс GH(GHAssertTrue...).
26. GHUnit - Запуск
● Запуск на девайсе и в симуляторе(после
некоторых махинаций)
● Тесты запускаются внутри отдельного ios
приложения
● Можно выбирать какие тесты запускать
● Приложение может упасть, если будет
unexpected exception
27. GHUnit - Отчеты об ошибках
● Стек трейсы, номера строк, текстовое
описание ошибки
● Отчеты об ошибках могут быть
представлены в junit формате
○ WRITE_JUNIT_XML=YES
30. 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
31. Best Practices
● Отдельный таргет на юнит тесты;
● Отдельный таргет на интеграционные
тесты;
● Отдельный на медленные;
● Отдельный на performance...
32. Final Recommendations
● Unit Tests XCode 4 - OCUnit
● Unit Tests XCode 3 - GTM
● GHUnit - для интеграционных тестов