SlideShare a Scribd company logo
TDD и VIPER
Станислав Цыганов
DevAlloy
Сегодня обсудим
• Что такое TDD?
• Чем VIPER полезен в тестировании?
• Тестирование компонентов VIPER-модуля
TDD
• Разработка через тестирование
• Тесты полностью описывают поведение
класса
• Есть статья и выступление Андрея Резанова
http://habrahabr.ru/company/rambler-co/blog/263087/
VIPER + TDD = ?
Presentation Level
Buisness Logic Level
Core Level
?
VIPER + TDD = ?
• Тестирование Presentation слоя
• Через тонкий VC к тестируемости
• UI-тестов недостаточно
Общий подход
• Боевой тестируемый компонент
• Окружаем моками
• Вызываем методы интерфейса/реализуемых
протоколов
• Проверяем вызов методов моков или
изменение свойств
Тестирование View
• IBAction и IBOutlet в .h
• View взаимодействует с Presenter через протокол
• Важно протестировать методы жизненного цикла
Тестирование View
ViewIBAction/IBOutlet <ViewOutput>
ViewIBOutlet <ViewInput>
Тестирование Router
• Тестируем методы переходов
• Тестируем передачу данных
Router
<RouterInput>
transitionHandler
Тестирование Interactor
• Тестируем проксирование в BL слой и обратно
• Тестируем правильное преобразование
моделей
Interactor ServiceMock<InteractorInput>
Interactor<InteractorOutput> Callback
Тестирование Presenter
• Является связующим звеном модуля
• Большая часть тестов проверяет передачу
данных из одной части модуля в другую
Presenter <InteractorInput><ViewInput>
<RouterInput>
Тестирование Presenter
• Необходимо учитывать, что P - входная точка
• Необходимо учитывать различные входные
параметры
Presenter
<ModuleInput>
<ViewOutput>
<ViewInput>
Тестирование Assembly
• Проверяем правильную настройку модуля
• Generamba создает практически завершенный
набор тестов
Обсудили
• Что такое TDD?
• Чем VIPER полезен в тестировании?
• Тестирование компонентов VIPER-модуля
Вопросы?

More Related Content

PDF
Rambler.iOS #1: Nimbus Kit Models
PDF
Rambler.iOS #5: VIPER a la Rambler
PDF
Сергей Крапивенский
PDF
66 - Spring. Spring и JSF
PDF
141 - Spring. Добавление контроллеров Spring MVC
PDF
130 - Spring WebFlow. Создание проекта
PDF
131 - Spring. Переход между страницами
PPTX
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Rambler.iOS #1: Nimbus Kit Models
Rambler.iOS #5: VIPER a la Rambler
Сергей Крапивенский
66 - Spring. Spring и JSF
141 - Spring. Добавление контроллеров Spring MVC
130 - Spring WebFlow. Создание проекта
131 - Spring. Переход между страницами
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"

What's hot (20)

PPTX
Андрей Чебукин "Построение успешных API"
PDF
Станислав Цыганов "SOA в iOS разработке"
PPTX
Test driven development in net
PPTX
"React application structure at project start", Maksym Shestopal
PPTX
MSI In-Store Pickup Функционал & сложности
PPTX
Test Driven Development in ASP.NET MVC 3
PPTX
QA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерах
PPTX
Protrarctor and Angular
PPTX
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
PPTX
Delivering Native User Experience In Client Side Java Applications
PPTX
QA Fes 2016. Александр Неделяев. Система мониторинга производительности своим...
PDF
#5 "React.js" Антон Артамонов
PDF
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
PDF
Feature toggles в процессе подбора, Алексей Ульенков СберТех
PDF
Максим Пугачев
PPTX
Redux и изоморфные приложения
PDF
Angular2
PDF
Meet Magento Belarus - Andriy Samilyak
PPTX
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
PDF
Take a Look at Akka-Java
Андрей Чебукин "Построение успешных API"
Станислав Цыганов "SOA в iOS разработке"
Test driven development in net
"React application structure at project start", Maksym Shestopal
MSI In-Store Pickup Функционал & сложности
Test Driven Development in ASP.NET MVC 3
QA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерах
Protrarctor and Angular
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Delivering Native User Experience In Client Side Java Applications
QA Fes 2016. Александр Неделяев. Система мониторинга производительности своим...
#5 "React.js" Антон Артамонов
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
Feature toggles в процессе подбора, Алексей Ульенков СберТех
Максим Пугачев
Redux и изоморфные приложения
Angular2
Meet Magento Belarus - Andriy Samilyak
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
Take a Look at Akka-Java
Ad

More from RAMBLER&Co (20)

PDF
RDSDataSource: Основы LLVM
PDF
Rambler.iOS #9: Анализируй это!
PDF
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?
PDF
Rambler.iOS #9: Life with out of memory
PDF
RDSDataSource: Чистые тесты на Swift
PDF
RDSDataSource: OCLint
PDF
RDSDataSource: Построение UML диаграмм
PDF
RDSDataSource: App Thinning
PDF
RDSDataSource: Мастер-класс по Dip
PDF
RDSDataSource: YapDatabase
PDF
Rambler.iOS #8: Чистые unit-тесты
PDF
Rambler.iOS #8: Сервис-ориентированная архитектура
PDF
Rambler.iOS #8: Make your app extensible with JavaScriptCore
PDF
Rambler.iOS #8: Как не стать жертвой бэкендеров
PDF
RDSDataSource: iOS Reverse Engineering for inexperienced
PDF
RDSDataSource: Автогенерация документации для SDK
PDF
RDSDataSource: Плюрализация в iOS
PDF
RDSDataSource: Promises
PDF
RDSDataSource: Flux, Redux, ReSwift
PDF
Rambler.iOS #7: Построение сложного табличного интерфейса
RDSDataSource: Основы LLVM
Rambler.iOS #9: Анализируй это!
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?
Rambler.iOS #9: Life with out of memory
RDSDataSource: Чистые тесты на Swift
RDSDataSource: OCLint
RDSDataSource: Построение UML диаграмм
RDSDataSource: App Thinning
RDSDataSource: Мастер-класс по Dip
RDSDataSource: YapDatabase
Rambler.iOS #8: Чистые unit-тесты
Rambler.iOS #8: Сервис-ориентированная архитектура
Rambler.iOS #8: Make your app extensible with JavaScriptCore
Rambler.iOS #8: Как не стать жертвой бэкендеров
RDSDataSource: iOS Reverse Engineering for inexperienced
RDSDataSource: Автогенерация документации для SDK
RDSDataSource: Плюрализация в iOS
RDSDataSource: Promises
RDSDataSource: Flux, Redux, ReSwift
Rambler.iOS #7: Построение сложного табличного интерфейса
Ad

Rambler.iOS #5: TDD и VIPER