XP.Party (iOS) - unit tests frameworks overview

33
Test Frameworks overview Инженерные практики в iOS: Unit Tests

Transcript of XP.Party (iOS) - unit tests frameworks overview

Page 1: XP.Party (iOS) - unit tests frameworks overview

Test Frameworks overview

Инженерные практики в iOS: Unit Tests

Page 2: XP.Party (iOS) - unit tests frameworks overview

● Виталий Ружников○ iOS-фрилансер○ Руководитель разработки мобильных проектов

● Антон Катков

○ Тренер по инженерным практикам○ Директор, руководитель проектов, iOS-

разработчик

О нас

Page 3: XP.Party (iOS) - unit tests frameworks overview

Roadmap

● Unit Tests● OCUnit● Google Toolbox for Mac (GTM)● GHUnit● Рекоммендации

Page 4: XP.Party (iOS) - unit tests frameworks overview

Unit Test

● Проверка компонента, что он ведет себя так, как ожидает этого программист;

● Компонентом может быть функция или класс.

Page 5: XP.Party (iOS) - unit tests frameworks overview

Unit Test

● Не обращается к базе данных● Не лезет в сеть● Не обращается к файловой системе● Для их выполнения приходится

специально настраивать среду, например, править конфигурационные файлы.

● Выполняются быстро(очень очень быстро, тест, выполняющийся 1/10 сек, медленный тест)

Page 6: XP.Party (iOS) - unit tests frameworks overview

Интеграционные

● Все остальное

Page 7: XP.Party (iOS) - unit tests frameworks overview

Критерии

● Легкость подключения, написания и запуска тестов;

● Сообщения об ошибках в тестах;● Возможность отладки;● Интеграция с IDE(XCode 4.x, XCode 3.x,

AppCode);● Запуск тестов из коммандой строки(для

регулярного прогона на сервере непрерывной интеграции);

Page 8: XP.Party (iOS) - unit tests frameworks overview

OCUnit - Подключение

● Из коробки (галочку поставить при создании проекта);

● Либо добавить unit test target к существующему проекту;

Page 9: XP.Party (iOS) - unit tests frameworks overview

OCUnit - Пишем тесты

● Наследуемся от SenTestCase● -(void)testMyTestNameGoesHere{}● STAssertEquals● STAssertEqualsWithAccuracy● STAssertEqualObjects● STAssertThrows

Page 10: XP.Party (iOS) - unit tests frameworks overview

OCUnit - Запуск, товарищи!

● Logic tests запускаются только на симуляторе○ XCode 4 - Схема 'Test' для запуска○ XCode 3 - выбрать таргет тестов○ Можно редактировать какие тесты запускать,

отредактировав схему● Application tests - и на девайсе и на

симуляторе○ Использовать 'Run' scheme для запуска○ Прогоняются все тесты

Page 11: XP.Party (iOS) - unit tests frameworks overview

Демо

Page 12: XP.Party (iOS) - unit tests frameworks overview

OCUnit - Сообщение об ошибках

● Номера строчек в коде и сообщения об ошибке

● Есть возможность генерации JUnit-подобных отчетов:○ https://github.

com/hborders/BPOCUnitXMLReporter

Page 13: XP.Party (iOS) - unit tests frameworks overview

OCUnit - Отладка

● XCode 4 - Добавляем брейкпойнт и вперед

● XCode 3 - Излазить гугл и пройти нетривиальную инструкцию

Page 14: XP.Party (iOS) - unit tests frameworks overview

OCUnit - Поддержка в IDE

● Свалившиеся тесты представлены в issue навигаторе.

● Application Tests - только сообщения в консоли.

Page 15: XP.Party (iOS) - unit tests frameworks overview

OCUnit - Запуск из командной строки

● Используем команду xcodebuild○ xcodebuild -target UnitTests -configuration

Debug -sdk iphonesimulator5.0 clean build

Page 16: XP.Party (iOS) - unit tests frameworks overview

GTM Подключение

● Проходим инструкцию http://code.google.

com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting ● Тесты по существу запускаются из

коммандной строки● Нет искусственного разграничения на

logic и application тесты

Page 17: XP.Party (iOS) - unit tests frameworks overview

GTM - Пишем тесты

● Наследуемся от GTMTestCase

● -(void)testMyTestNameGoesHere {}● Assertations совместимы с теми, что в

OCUnit!● STAssertEqualStrings

Page 18: XP.Party (iOS) - unit tests frameworks overview

GTM - Запуск

● И на девайсе и на симуляторе● Нельзя выборочный запуск тестов делать

Page 19: XP.Party (iOS) - unit tests frameworks overview

GTM - Сообщения об ошибках

● Практически такое же как в OCUnit;● Нет информации о возможности

генерации JUnit подобных отчетов;

Page 20: XP.Party (iOS) - unit tests frameworks overview

GTM - Debugging

● Включаем галочку 'Run script only when installing'○ Если не включить, то запуск тестов будет

проводиться на этапе компиляции● Ставим брейкпойнт и запускаем тестовый

таргет

Page 21: XP.Party (iOS) - unit tests frameworks overview

GTM - XCode Integration

● На этапе компиляции ошибки видны в issue навигаторе и редакторе кода

● При пригоне после установки на симуляторе ищем сообщения об ошибках в консоли

Page 22: XP.Party (iOS) - unit tests frameworks overview

GTM - Запуск из командной строки

● Ничем не отличается от OCUnit, но не забываем снять галочку с "Run script only when installing"

Page 23: XP.Party (iOS) - unit tests frameworks overview

GHUnit - Плюшки

● Асинхронные тест кейсы● Ассерты с картинками вьюшек● Выбор отдельных тестов● Мокирование NSUrlConnection

Page 24: XP.Party (iOS) - unit tests frameworks overview

GHUnit - Подлючение

● Проходим по шагам инструкцию

http://gabriel.github.com/gh-unit/docs/appledoc_include/guide_install_ios_4.html

● Нужен отдельный таргет● Тесты запускаются в отдельном

приложении

Page 25: XP.Party (iOS) - unit tests frameworks overview

GHUnit - Пишем тесты

● Наследуемся от GHTestCase● -(void)testMyTestNameGoesHere { }● Assertations практически теже самые,

только префикс GH(GHAssertTrue...).

Page 26: XP.Party (iOS) - unit tests frameworks overview

● Запуск на девайсе и в симуляторе(после некоторых махинаций)

● Тесты запускаются внутри отдельного ios приложения

● Можно выбирать какие тесты запускать● Приложение может упасть, если будет

unexpected exception

GHUnit - Запуск

Page 27: XP.Party (iOS) - unit tests frameworks overview

GHUnit - Отчеты об ошибках

● Стек трейсы, номера строк, текстовое описание ошибки

● Отчеты об ошибках могут быть представлены в junit формате○ WRITE_JUNIT_XML=YES

Page 28: XP.Party (iOS) - unit tests frameworks overview

GHUnit - Отладка

● Добавляем брейкпойнт● Собираем и запускаем тестовое

приложение

Page 29: XP.Party (iOS) - unit tests frameworks overview

GHUnit - Ide Integration

● Отсутствует

Page 30: XP.Party (iOS) - unit tests frameworks overview

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

Page 31: XP.Party (iOS) - unit tests frameworks overview

Best Practices

● Отдельный таргет на юнит тесты;● Отдельный таргет на интеграционные

тесты;● Отдельный на медленные;● Отдельный на performance...

Page 32: XP.Party (iOS) - unit tests frameworks overview

Final Recommendations

● Unit Tests XCode 4 - OCUnit● Unit Tests XCode 3 - GTM ● GHUnit - для интеграционных тестов