XP.Party (iOS) - testable code & architecture

Anton Katkov
Anton KatkovFounder at MacBuildServer
Testable code &
        architecture
Инженерные практики в iOS: Unit Tests
О нас
● Виталий Ружников
  ○ iOS-фрилансер
  ○ Руководитель разработки мобильных проектов

● Антон Катков
  ○ Тренер по инженерным практикам
  ○ Директор, руководитель проектов, iOS-
    разработчик
Что значит testable?
● Testable - проверяемые
                       (c) Google translate


● Проверить можно что угодно
● Проверять должно быть удобно
Если проверять не удобно, значит
         код не testable
Как достигается testability?
● инженерные практики:
  ○ постоянный рефакторинг
  ○ применение паттернов проектирования
  ○ устранение применения антипаттернов
      проектирования
  ○   поиск и устранение запахов кода и тестов
Пример
Для чего нужны MVC, MVM, MVP и т.п?




GUI Architectures by Martin Fowler
Пример 1: без DI
@interface XPClassWithNoDI : NSObject {
  XPDataSource *_datasource;
  XPDelegate *_delegate;
  XPService *_service;
}

@end
Пример 1: без DI
@implementation XPClassWithNoDI

- (id)init {
    _delegate = // delegate initialization
    _datasource = // datasource initialization
    _service = // service initialization

    return self;
}

@end
Пример 1: вопрос
● Как протестировать класс XPClassWithNoDI?
Пример 1: c DI
@interface XPClassWithDI : NSObject {
  XPDataSource *_datasource;
  XPDelegate *_delegate;
  XPService *_service;
}

- (id)initWithDelegate:(XPDelegate *)delegate datasource:
(XPDataSource *)datasource service:(XPService *)service;

@end
Пример 1: c DI
@implementation XPClassWithDI

- (id)initWithDelegate:(XPDelegate *)delegate datasource:
(XPDataSource *)datasource service:(XPService *)service {
    _delegate = delegate;
    _datasource = datasource;
    _service = service;

  return self;
}
@end
Пример 1: выводы
● Возможно переиспользование кода
● Удобно покрывать тестами за счёт
  мокирования
● Легче изменяется логика поведения
● Класс более понятен без погружения в код
● Незначительно увеличилась сложность
  написания

Исходный код здесь:
https://github.com/xp-party/ios-testability
Пример 2: функция с многими
аргументами
- (void)doSomethingWithObj1:(id)obj1
                         obj2:(id)obj2
                   fromDate:(NSDate *)fromDate
                      toDate:(NSDate *)toDate
                   forString1:(NSString *)string1
                   byString2:(NSString *)string2;
Практика 1: нетестируемый код
Исходники:
https://github.com/xp-party/teamgame-ios
Branch: original_code_to_test

Задача:
Написать тесты на метод:
- (void)consumeMessage:(NSDictionary *)
message;
Практика 2: тестируемый код
Исходники:
https://github.com/xp-party/teamgame-ios
Branch: refactored_code_to_test

Задача:
Написать тесты на метод:
- (void)consumeMessage:(NSDictionary *)
message;
Выводы
●   Надо знать паттерны
●   Необходимо использовать рефакторинг в
    полной мере
●   Нужно стремитесь к "Чистому Коду"
●   Используйте TDD :)
Контакты
● Виталий Ружников
  ○ varuzhnikov@gmail.com
  ○ Twitter: @ruzhnikov
  ○ Skype: viruzh

● Антон Катков
  ○ katkov.anton@gmail.com
  ○ Twitter: @Vanger_cat
  ○ Skype: anton.katkov
1 of 17

Recommended

Unit tests & tdd in web development by
Unit tests & tdd in web developmentUnit tests & tdd in web development
Unit tests & tdd in web developmentAndrey Kucherenko
453 views26 slides
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux by
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxПавел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxPlatonov Sergey
609 views22 slides
Unit tests for python code by
Unit tests for python codeUnit tests for python code
Unit tests for python codeВалька Кирсанова
87 views14 slides
Разработка надежных параллельных, распределенных приложений: быстро и дешево by
Разработка надежных параллельных, распределенных приложений: быстро и дешевоРазработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоDotNetConf
690 views39 slides
Как приручить реактивное программирование by
Как приручить реактивное программированиеКак приручить реактивное программирование
Как приручить реактивное программированиеDotNetConf
1.6K views48 slides
ковалев нестандатное нт by
ковалев    нестандатное нтковалев    нестандатное нт
ковалев нестандатное нтAlexei Lupan
697 views20 slides

More Related Content

What's hot

Автоматизация UI-тестирования следующего поколения by
Автоматизация UI-тестирования следующего поколенияАвтоматизация UI-тестирования следующего поколения
Автоматизация UI-тестирования следующего поколенияDevDay
524 views21 slides
Евгений Сафронов "Тестирование. точка зрения разработчика" by
Евгений Сафронов "Тестирование. точка зрения разработчика"Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"DataArt
278 views33 slides
Комплексное использование анализаторов для повышения качества кода by
Комплексное использование анализаторов для повышения качества кодаКомплексное использование анализаторов для повышения качества кода
Комплексное использование анализаторов для повышения качества кодаAndrey Karpov
62 views49 slides
TeaVM: dead code elimination and devirtualization by
TeaVM: dead code elimination and devirtualizationTeaVM: dead code elimination and devirtualization
TeaVM: dead code elimination and devirtualizationАлексей Андреев
81 views22 slides
C#5 What's new? by
C#5 What's new?C#5 What's new?
C#5 What's new?Oleg Kulygin
440 views21 slides
Continuous Delivery для ASP.NET MVC проекта под Linux by
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxDotNetConf
471 views15 slides

What's hot(20)

Автоматизация UI-тестирования следующего поколения by DevDay
Автоматизация UI-тестирования следующего поколенияАвтоматизация UI-тестирования следующего поколения
Автоматизация UI-тестирования следующего поколения
DevDay524 views
Евгений Сафронов "Тестирование. точка зрения разработчика" by DataArt
Евгений Сафронов "Тестирование. точка зрения разработчика"Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"
DataArt278 views
Комплексное использование анализаторов для повышения качества кода by Andrey Karpov
Комплексное использование анализаторов для повышения качества кодаКомплексное использование анализаторов для повышения качества кода
Комплексное использование анализаторов для повышения качества кода
Andrey Karpov62 views
Continuous Delivery для ASP.NET MVC проекта под Linux by DotNetConf
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под Linux
DotNetConf471 views
Platypus platform ivbit by jskonst
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbit
jskonst6.3K views
Как анимировать тысячи объектов на карте и не подвесить браузер by DotNetConf
Как анимировать тысячи объектов на карте и не подвесить браузерКак анимировать тысячи объектов на карте и не подвесить браузер
Как анимировать тысячи объектов на карте и не подвесить браузер
DotNetConf432 views
Как это будет: ASP.NET Core by DotNetConf
Как это будет: ASP.NET CoreКак это будет: ASP.NET Core
Как это будет: ASP.NET Core
DotNetConf767 views
REPL в Node.js: улучшаем быт разработчик by IT61
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
IT611.2K views
C# 5.0. Взгляд в будущее by GetDev.NET
C# 5.0. Взгляд в будущееC# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущее
GetDev.NET2K views
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS. by SECON
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.
SECON140 views
Rust - GDG DevFest 2016 Nizhny Novgorod by Nikita Baksalyar
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny Novgorod
Nikita Baksalyar430 views
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt by Sergey Platonov
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtДенис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Sergey Platonov552 views
SWIFT нужен ли он вам? by Improve Group
SWIFT нужен ли он вам?SWIFT нужен ли он вам?
SWIFT нужен ли он вам?
Improve Group292 views
Как жить в согласии с SOLID? by DotNetConf
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
DotNetConf1.5K views
Константин Васильев «Fody против рутины» by SpbDotNet Community
Константин Васильев «Fody против рутины»Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ by Alexandr Konfidentsialno
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМПрограммирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Елена Жукова "Жизнь вне JavaScript" by Fwdays
Елена Жукова "Жизнь вне JavaScript"Елена Жукова "Жизнь вне JavaScript"
Елена Жукова "Жизнь вне JavaScript"
Fwdays641 views

Viewers also liked

Presentacion menu mayo by
Presentacion menu mayoPresentacion menu mayo
Presentacion menu mayohellenrz
327 views11 slides
Mujeres en los olimpicos by
Mujeres en los olimpicosMujeres en los olimpicos
Mujeres en los olimpicosVictoria Mendez
238 views5 slides
Marianella-mendoza by
Marianella-mendozaMarianella-mendoza
Marianella-mendozamarianellamendoza
262 views7 slides
Noorulmasabeeh 2-pdf by
Noorulmasabeeh 2-pdfNoorulmasabeeh 2-pdf
Noorulmasabeeh 2-pdfOther
631 views183 slides
Gabarito da 6ª lista de geometria by
Gabarito da 6ª lista de geometriaGabarito da 6ª lista de geometria
Gabarito da 6ª lista de geometriaProfessor Carlinhos
401 views4 slides
التفكر والإعتبار في فضل الصلاة والسلام علي سيدنا محمد النبي المختار الشيخ ا... by
التفكر والإعتبار في فضل الصلاة والسلام علي سيدنا محمد النبي المختار   الشيخ ا...التفكر والإعتبار في فضل الصلاة والسلام علي سيدنا محمد النبي المختار   الشيخ ا...
التفكر والإعتبار في فضل الصلاة والسلام علي سيدنا محمد النبي المختار الشيخ ا...Other
688 views257 slides

Viewers also liked(20)

Presentacion menu mayo by hellenrz
Presentacion menu mayoPresentacion menu mayo
Presentacion menu mayo
hellenrz327 views
Noorulmasabeeh 2-pdf by Other
Noorulmasabeeh 2-pdfNoorulmasabeeh 2-pdf
Noorulmasabeeh 2-pdf
Other631 views
التفكر والإعتبار في فضل الصلاة والسلام علي سيدنا محمد النبي المختار الشيخ ا... by Other
التفكر والإعتبار في فضل الصلاة والسلام علي سيدنا محمد النبي المختار   الشيخ ا...التفكر والإعتبار في فضل الصلاة والسلام علي سيدنا محمد النبي المختار   الشيخ ا...
التفكر والإعتبار في فضل الصلاة والسلام علي سيدنا محمد النبي المختار الشيخ ا...
Other688 views
Maarif e raza march 2000 by Other
Maarif e raza  march 2000Maarif e raza  march 2000
Maarif e raza march 2000
Other139 views
Opowieści w Sieci – interaktywny storytelling by Jacek Szlak
Opowieści w Sieci – interaktywny storytellingOpowieści w Sieci – interaktywny storytelling
Opowieści w Sieci – interaktywny storytelling
Jacek Szlak1.5K views
Ahkam e waleema by mufti abid raza attari by Other
Ahkam e waleema by mufti abid raza attariAhkam e waleema by mufti abid raza attari
Ahkam e waleema by mufti abid raza attari
Other696 views
Desculpa por acaso és uma bruxa by becrecv
Desculpa por acaso és uma bruxaDesculpa por acaso és uma bruxa
Desculpa por acaso és uma bruxa
becrecv270 views
00-PRAKTEK CERDAS DI LOMBOK UTARA-publish by daniel kaligis
00-PRAKTEK CERDAS DI LOMBOK UTARA-publish00-PRAKTEK CERDAS DI LOMBOK UTARA-publish
00-PRAKTEK CERDAS DI LOMBOK UTARA-publish
daniel kaligis102 views
Sesión 3 by NOHEMINH
Sesión 3Sesión 3
Sesión 3
NOHEMINH47 views
Curso hist diapos by lisG
Curso hist diaposCurso hist diapos
Curso hist diapos
lisG214 views

Similar to XP.Party (iOS) - testable code & architecture

UI+unit testing in iOS by
UI+unit testing in iOSUI+unit testing in iOS
UI+unit testing in iOSКирилл Ушков
575 views23 slides
Повышение качества тестов и автоматическая валидация REST API документации by
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииCEE-SEC(R)
1.5K views22 slides
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012 by
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Dmytro Mindra
1.3K views30 slides
Soft labs. достижима ли в c++ эффективность языка среднего уровня by
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняLuxoftTraining
650 views29 slides
Современный статический анализ кода: что умеет он, чего не умели линтеры by
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
419 views44 slides
DevOps guide for awesome quality assurance by
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceАнастасия Асеева
349 views86 slides

Similar to XP.Party (iOS) - testable code & architecture(20)

Повышение качества тестов и автоматическая валидация REST API документации by CEE-SEC(R)
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
CEE-SEC(R)1.5K views
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012 by Dmytro Mindra
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Dmytro Mindra1.3K views
Soft labs. достижима ли в c++ эффективность языка среднего уровня by LuxoftTraining
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровня
LuxoftTraining650 views
Современный статический анализ кода: что умеет он, чего не умели линтеры by corehard_by
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
corehard_by419 views
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi... by HappyDev
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
HappyDev816 views
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ... by Alex V. Petrov
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
Alex V. Petrov996 views
Никита Галкин "Testing in Node.js World" by Fwdays
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
Fwdays370 views
Оценка проектов тестирования by Rina Uzhevko
Оценка проектов тестированияОценка проектов тестирования
Оценка проектов тестирования
Rina Uzhevko3.3K views
Test Driven Development in .NET Applications by Anton Vidishchev
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
Anton Vidishchev448 views
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва by it-people
 Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва  Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
it-people1.3K views
C# Desktop. Занятие 16. by Igor Shkulipa
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.
Igor Shkulipa170 views
Использование Mock-объектов в TDD на платформе .NET by Pavel Treshnikov
Использование Mock-объектов в TDD на платформе .NETИспользование Mock-объектов в TDD на платформе .NET
Использование Mock-объектов в TDD на платформе .NET
Pavel Treshnikov886 views
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И... by Mail.ru Group
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
Mail.ru Group3.3K views
IT-инфраструктура. FAQ для разработчика by Mikhail Chinkov
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
Mikhail Chinkov267 views
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ by Sergey Platonov
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Sergey Platonov813 views
XP Days Ukraine 2014 - Refactoring legacy code by Dmytro Mindra
XP Days Ukraine 2014 - Refactoring legacy codeXP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy code
Dmytro Mindra6.2K views
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS... by Ontico
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
Ontico209 views
C++ STL & Qt. Занятие 10. by Igor Shkulipa
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
Igor Shkulipa351 views

More from Anton Katkov

AgileDays'14 - современная разработка под iOS by
AgileDays'14 - современная разработка под iOSAgileDays'14 - современная разработка под iOS
AgileDays'14 - современная разработка под iOSAnton Katkov
756 views29 slides
AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ... by
AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...
AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...Anton Katkov
787 views29 slides
AgileCamp'12 Нижний Новгород: Введение by
AgileCamp'12 Нижний Новгород: Введение AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение Anton Katkov
573 views16 slides
AgileCamp'12 Нижний Новгород: Заключение by
AgileCamp'12 Нижний Новгород: ЗаключениеAgileCamp'12 Нижний Новгород: Заключение
AgileCamp'12 Нижний Новгород: ЗаключениеAnton Katkov
432 views7 slides
XP.Party (iOS) - unit tests frameworks overview by
XP.Party (iOS) - unit tests frameworks overviewXP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overviewAnton Katkov
766 views33 slides
AgileDays'12 - Continuous deployment by
AgileDays'12 - Continuous deploymentAgileDays'12 - Continuous deployment
AgileDays'12 - Continuous deploymentAnton Katkov
354 views20 slides

More from Anton Katkov(10)

AgileDays'14 - современная разработка под iOS by Anton Katkov
AgileDays'14 - современная разработка под iOSAgileDays'14 - современная разработка под iOS
AgileDays'14 - современная разработка под iOS
Anton Katkov756 views
AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ... by Anton Katkov
AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...
AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...
Anton Katkov787 views
AgileCamp'12 Нижний Новгород: Введение by Anton Katkov
AgileCamp'12 Нижний Новгород: Введение AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение
Anton Katkov573 views
AgileCamp'12 Нижний Новгород: Заключение by Anton Katkov
AgileCamp'12 Нижний Новгород: ЗаключениеAgileCamp'12 Нижний Новгород: Заключение
AgileCamp'12 Нижний Новгород: Заключение
Anton Katkov432 views
XP.Party (iOS) - unit tests frameworks overview by Anton Katkov
XP.Party (iOS) - unit tests frameworks overviewXP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overview
Anton Katkov766 views
AgileDays'12 - Continuous deployment by Anton Katkov
AgileDays'12 - Continuous deploymentAgileDays'12 - Continuous deployment
AgileDays'12 - Continuous deployment
Anton Katkov354 views
AgileCamp’11 Новосибирск - Test Driven Development (TDD) by Anton Katkov
AgileCamp’11 Новосибирск - Test Driven Development (TDD)AgileCamp’11 Новосибирск - Test Driven Development (TDD)
AgileCamp’11 Новосибирск - Test Driven Development (TDD)
Anton Katkov870 views
AgileCamp’11 Новосибирск - Continuous Integration (CI) by Anton Katkov
AgileCamp’11 Новосибирск - Continuous Integration (CI)AgileCamp’11 Новосибирск - Continuous Integration (CI)
AgileCamp’11 Новосибирск - Continuous Integration (CI)
Anton Katkov656 views
AgileCamp'11 Новосибирск - Unit Tests by Anton Katkov
AgileCamp'11 Новосибирск - Unit TestsAgileCamp'11 Новосибирск - Unit Tests
AgileCamp'11 Новосибирск - Unit Tests
Anton Katkov708 views
AgileCamp'11 Новосибирск - введение в инженерные практики by Anton Katkov
AgileCamp'11 Новосибирск - введение в инженерные практикиAgileCamp'11 Новосибирск - введение в инженерные практики
AgileCamp'11 Новосибирск - введение в инженерные практики
Anton Katkov621 views

XP.Party (iOS) - testable code & architecture

  • 1. Testable code & architecture Инженерные практики в iOS: Unit Tests
  • 2. О нас ● Виталий Ружников ○ iOS-фрилансер ○ Руководитель разработки мобильных проектов ● Антон Катков ○ Тренер по инженерным практикам ○ Директор, руководитель проектов, iOS- разработчик
  • 3. Что значит testable? ● Testable - проверяемые (c) Google translate ● Проверить можно что угодно ● Проверять должно быть удобно
  • 4. Если проверять не удобно, значит код не testable
  • 5. Как достигается testability? ● инженерные практики: ○ постоянный рефакторинг ○ применение паттернов проектирования ○ устранение применения антипаттернов проектирования ○ поиск и устранение запахов кода и тестов
  • 6. Пример Для чего нужны MVC, MVM, MVP и т.п? GUI Architectures by Martin Fowler
  • 7. Пример 1: без DI @interface XPClassWithNoDI : NSObject { XPDataSource *_datasource; XPDelegate *_delegate; XPService *_service; } @end
  • 8. Пример 1: без DI @implementation XPClassWithNoDI - (id)init { _delegate = // delegate initialization _datasource = // datasource initialization _service = // service initialization return self; } @end
  • 9. Пример 1: вопрос ● Как протестировать класс XPClassWithNoDI?
  • 10. Пример 1: c DI @interface XPClassWithDI : NSObject { XPDataSource *_datasource; XPDelegate *_delegate; XPService *_service; } - (id)initWithDelegate:(XPDelegate *)delegate datasource: (XPDataSource *)datasource service:(XPService *)service; @end
  • 11. Пример 1: c DI @implementation XPClassWithDI - (id)initWithDelegate:(XPDelegate *)delegate datasource: (XPDataSource *)datasource service:(XPService *)service { _delegate = delegate; _datasource = datasource; _service = service; return self; } @end
  • 12. Пример 1: выводы ● Возможно переиспользование кода ● Удобно покрывать тестами за счёт мокирования ● Легче изменяется логика поведения ● Класс более понятен без погружения в код ● Незначительно увеличилась сложность написания Исходный код здесь: https://github.com/xp-party/ios-testability
  • 13. Пример 2: функция с многими аргументами - (void)doSomethingWithObj1:(id)obj1 obj2:(id)obj2 fromDate:(NSDate *)fromDate toDate:(NSDate *)toDate forString1:(NSString *)string1 byString2:(NSString *)string2;
  • 14. Практика 1: нетестируемый код Исходники: https://github.com/xp-party/teamgame-ios Branch: original_code_to_test Задача: Написать тесты на метод: - (void)consumeMessage:(NSDictionary *) message;
  • 15. Практика 2: тестируемый код Исходники: https://github.com/xp-party/teamgame-ios Branch: refactored_code_to_test Задача: Написать тесты на метод: - (void)consumeMessage:(NSDictionary *) message;
  • 16. Выводы ● Надо знать паттерны ● Необходимо использовать рефакторинг в полной мере ● Нужно стремитесь к "Чистому Коду" ● Используйте TDD :)
  • 17. Контакты ● Виталий Ружников ○ varuzhnikov@gmail.com ○ Twitter: @ruzhnikov ○ Skype: viruzh ● Антон Катков ○ katkov.anton@gmail.com ○ Twitter: @Vanger_cat ○ Skype: anton.katkov