SlideShare una empresa de Scribd logo
1 de 17
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

Автоматизация UI-тестирования следующего поколения
Автоматизация UI-тестирования следующего поколенияАвтоматизация UI-тестирования следующего поколения
Автоматизация UI-тестирования следующего поколения
DevDay
 
Комплексное использование анализаторов для повышения качества кода
Комплексное использование анализаторов для повышения качества кодаКомплексное использование анализаторов для повышения качества кода
Комплексное использование анализаторов для повышения качества кода
Andrey Karpov
 
Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbit
jskonst
 
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.
SECON
 

La actualidad más candente (20)

Автоматизация UI-тестирования следующего поколения
Автоматизация UI-тестирования следующего поколенияАвтоматизация UI-тестирования следующего поколения
Автоматизация UI-тестирования следующего поколения
 
Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"
 
Комплексное использование анализаторов для повышения качества кода
Комплексное использование анализаторов для повышения качества кодаКомплексное использование анализаторов для повышения качества кода
Комплексное использование анализаторов для повышения качества кода
 
TeaVM: dead code elimination and devirtualization
TeaVM: dead code elimination and devirtualizationTeaVM: dead code elimination and devirtualization
TeaVM: dead code elimination and devirtualization
 
C#5 What's new?
C#5 What's new?C#5 What's new?
C#5 What's new?
 
Continuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под Linux
 
course js day 1
course js day 1course js day 1
course js day 1
 
Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbit
 
Как анимировать тысячи объектов на карте и не подвесить браузер
Как анимировать тысячи объектов на карте и не подвесить браузерКак анимировать тысячи объектов на карте и не подвесить браузер
Как анимировать тысячи объектов на карте и не подвесить браузер
 
Как это будет: ASP.NET Core
Как это будет: ASP.NET CoreКак это будет: ASP.NET Core
Как это будет: ASP.NET Core
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
C# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущееC# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущее
 
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.
 
Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny Novgorod
 
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtДенис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
 
SWIFT нужен ли он вам?
SWIFT нужен ли он вам?SWIFT нужен ли он вам?
SWIFT нужен ли он вам?
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
 
Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»
 
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМПрограммирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
 
Елена Жукова "Жизнь вне JavaScript"
Елена Жукова "Жизнь вне JavaScript"Елена Жукова "Жизнь вне JavaScript"
Елена Жукова "Жизнь вне JavaScript"
 

Destacado

Mujeres en los olimpicos
Mujeres en los olimpicosMujeres en los olimpicos
Mujeres en los olimpicos
Victoria Mendez
 
Gabarito da 6ª lista de geometria
Gabarito da 6ª lista de geometriaGabarito da 6ª lista de geometria
Gabarito da 6ª lista de geometria
Professor Carlinhos
 
Sobre evaluacion 2
Sobre evaluacion 2Sobre evaluacion 2
Sobre evaluacion 2
hermalazarte
 
Bachillerato uas virtual
Bachillerato uas virtualBachillerato uas virtual
Bachillerato uas virtual
claudia_ovalles
 
Desculpa por acaso és uma bruxa
Desculpa por acaso és uma bruxaDesculpa por acaso és uma bruxa
Desculpa por acaso és uma bruxa
becrecv
 
00-PRAKTEK CERDAS DI LOMBOK UTARA-publish
00-PRAKTEK CERDAS DI LOMBOK UTARA-publish00-PRAKTEK CERDAS DI LOMBOK UTARA-publish
00-PRAKTEK CERDAS DI LOMBOK UTARA-publish
daniel kaligis
 
apresentação_Onideia 2015
apresentação_Onideia 2015apresentação_Onideia 2015
apresentação_Onideia 2015
Jaques Projetos
 
Curso hist diapos
Curso hist diaposCurso hist diapos
Curso hist diapos
lisG
 
Papel vs plástico ingrata dolencia
Papel vs plástico   ingrata dolenciaPapel vs plástico   ingrata dolencia
Papel vs plástico ingrata dolencia
Maria Justo
 
Com vestes de louvor e alegria
Com vestes de louvor e alegriaCom vestes de louvor e alegria
Com vestes de louvor e alegria
IMQ
 

Destacado (20)

Presentacion menu mayo
Presentacion menu mayoPresentacion menu mayo
Presentacion menu mayo
 
Mujeres en los olimpicos
Mujeres en los olimpicosMujeres en los olimpicos
Mujeres en los olimpicos
 
Marianella-mendoza
Marianella-mendozaMarianella-mendoza
Marianella-mendoza
 
Gabarito da 6ª lista de geometria
Gabarito da 6ª lista de geometriaGabarito da 6ª lista de geometria
Gabarito da 6ª lista de geometria
 
Opowieści w Sieci – interaktywny storytelling
Opowieści w Sieci – interaktywny storytellingOpowieści w Sieci – interaktywny storytelling
Opowieści w Sieci – interaktywny storytelling
 
Denuncia lara
Denuncia laraDenuncia lara
Denuncia lara
 
Sobre evaluacion 2
Sobre evaluacion 2Sobre evaluacion 2
Sobre evaluacion 2
 
Unidad i. p1
Unidad i. p1Unidad i. p1
Unidad i. p1
 
Bachillerato uas virtual
Bachillerato uas virtualBachillerato uas virtual
Bachillerato uas virtual
 
Desculpa por acaso és uma bruxa
Desculpa por acaso és uma bruxaDesculpa por acaso és uma bruxa
Desculpa por acaso és uma bruxa
 
00-PRAKTEK CERDAS DI LOMBOK UTARA-publish
00-PRAKTEK CERDAS DI LOMBOK UTARA-publish00-PRAKTEK CERDAS DI LOMBOK UTARA-publish
00-PRAKTEK CERDAS DI LOMBOK UTARA-publish
 
Sesión 3
Sesión 3Sesión 3
Sesión 3
 
上網學習計劃簡介及受助家庭個案分享
上網學習計劃簡介及受助家庭個案分享上網學習計劃簡介及受助家庭個案分享
上網學習計劃簡介及受助家庭個案分享
 
Curso bpm acuicola
Curso bpm acuicolaCurso bpm acuicola
Curso bpm acuicola
 
apresentação_Onideia 2015
apresentação_Onideia 2015apresentação_Onideia 2015
apresentação_Onideia 2015
 
Curso hist diapos
Curso hist diaposCurso hist diapos
Curso hist diapos
 
Papel vs plástico ingrata dolencia
Papel vs plástico   ingrata dolenciaPapel vs plástico   ingrata dolencia
Papel vs plástico ingrata dolencia
 
Com vestes de louvor e alegria
Com vestes de louvor e alegriaCom vestes de louvor e alegria
Com vestes de louvor e alegria
 
Producto 2 yanga
Producto 2 yangaProducto 2 yanga
Producto 2 yanga
 
Reunion arciprestes
Reunion arciprestesReunion arciprestes
Reunion arciprestes
 

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

Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
CEE-SEC(R)
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Dmytro Mindra
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровня
LuxoftTraining
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
Anton Vidishchev
 

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

UI+unit testing in iOS
UI+unit testing in iOSUI+unit testing in iOS
UI+unit testing in iOS
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровня
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
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 ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
 
Оценка проектов тестирования
Оценка проектов тестированияОценка проектов тестирования
Оценка проектов тестирования
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
 
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
 Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва  Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.
 
Использование Mock-объектов в TDD на платформе .NET
Использование Mock-объектов в TDD на платформе .NETИспользование Mock-объектов в TDD на платформе .NET
Использование Mock-объектов в TDD на платформе .NET
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
 
XP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeXP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy code
 
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 

Más de Anton Katkov

AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...
AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...
AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...
Anton Katkov
 
AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение
Anton Katkov
 
AgileCamp'12 Нижний Новгород: Заключение
AgileCamp'12 Нижний Новгород: ЗаключениеAgileCamp'12 Нижний Новгород: Заключение
AgileCamp'12 Нижний Новгород: Заключение
Anton Katkov
 
XP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overviewXP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overview
Anton Katkov
 
AgileDays'12 - Continuous deployment
AgileDays'12 - Continuous deploymentAgileDays'12 - Continuous deployment
AgileDays'12 - Continuous deployment
Anton Katkov
 

Más de Anton Katkov (10)

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

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