3. Зачем писать юнит-тесты?
● Быть уверенным в том, что ваш код работает как надо.
● Продолжать быть уверенным в этом после внесения изменений
(защита от регрессии).
● Сокращать время ручного тестирования (как программистов, так и
тестировщиков).
● Эффективно использовать системы непрерывной интеграции (без
авто-тестов смысла в них становится меньше).
● Повышать ЧСВ: «Я могу в юнит-тесты!»
10. Немного теории
● Юнит-тесты — они же модульные тесты.
● Минимальный модуль в ООП — класс.
● Тестируем каждую нетривиальную функцию.
● Пишем более комплексные тесты на взаимосвязанные функции.
● Пишем как положительные, так и отрицательные тесты.
● Аксиома: НИКОГДА не верь входным данным, даже если данные дает
твой собственный код.
● В сферическом приложении в вакууме все функции являются
«чистыми», а классы — абсолютно изолированы.
● Реальность кусается.
12. iOS
XCTest — родное средство для юнит-тестов, умеет все: собственно юнит-
тесты, тесты асинхронных процессов, замеры производительности,
тестирование UI.
OCMock — средство для создания mock-объектов (полноценно работает
только с Objective-C).
KIF Framework — более удобное средство для автоматизации
тестирования UI.
13. Android
JUnit — стандартный фреймворк для написания юнит-тестов на Java,
тесты запускаются в виртуальной машине Java на компьютере.
Espresso — фреймворк для тестирования UI (входит в Android Testing
Support Library).
AndroidJUnitTestRunner — средство для запуска JUnit-тестов на реальных
устройствах и симуляторе.
14. Windows Phone
В среде MS Visual Studio есть все необходимые инструменты как для
модульного тестирования, так и для интерфейсного тестирования.
17. В реальности
Расставим приоритеты:
● Весь код модели (в паттерне MVC).
● Работа с API (как со своим, так и с чужим).
● Use cases (без UI).
● Производительность критических участков.
24. Тест работы с API: делаем это правильно
Необходимо разорвать зависимость (если она есть) и определить
протокол. В Objective-C можно использовать OCMock, но лучше и в нем
использовать протоколы.
26. Тестируем работу с CoreData
Не включаем классы сущностей в тестовый таргет и импортируем модуль
приложения в классе теста. Классы сущностей надо будет сделать
публичными.
28. Тест на вызов метода делегата
В OCMock есть готовое средство для таких тестов, но работает это, опять
же, только в Objective-C. Поэтому на Swift пишем сами.
34. Улучшаем архитектуру
● Чистые функции и чистые классы
● Разрыв зависимостей
● Один класс — одна задача (single responsibility)
● Применяем паттерны проектирования