SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Автоматизация UI-тестирования следующего поколения
Автоматизация UI-тестирования следующего поколенияАвтоматизация UI-тестирования следующего поколения
Автоматизация UI-тестирования следующего поколенияDevDay
 
Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"DataArt
 
Комплексное использование анализаторов для повышения качества кода
Комплексное использование анализаторов для повышения качества кодаКомплексное использование анализаторов для повышения качества кода
Комплексное использование анализаторов для повышения качества кодаAndrey Karpov
 
Continuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxDotNetConf
 
Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbitjskonst
 
Как анимировать тысячи объектов на карте и не подвесить браузер
Как анимировать тысячи объектов на карте и не подвесить браузерКак анимировать тысячи объектов на карте и не подвесить браузер
Как анимировать тысячи объектов на карте и не подвесить браузерDotNetConf
 
Как это будет: ASP.NET Core
Как это будет: ASP.NET CoreКак это будет: ASP.NET Core
Как это будет: ASP.NET CoreDotNetConf
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикIT61
 
C# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущееC# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущееGetDev.NET
 
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
 
Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodNikita Baksalyar
 
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtДенис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtSergey Platonov
 
SWIFT нужен ли он вам?
SWIFT нужен ли он вам?SWIFT нужен ли он вам?
SWIFT нужен ли он вам?Improve Group
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?DotNetConf
 
Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»SpbDotNet Community
 
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМПрограммирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМAlexandr Konfidentsialno
 
Елена Жукова "Жизнь вне JavaScript"
Елена Жукова "Жизнь вне JavaScript"Елена Жукова "Жизнь вне JavaScript"
Елена Жукова "Жизнь вне JavaScript"Fwdays
 

Tendances (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"
 

En vedette

Presentacion menu mayo
Presentacion menu mayoPresentacion menu mayo
Presentacion menu mayohellenrz
 
Mujeres en los olimpicos
Mujeres en los olimpicosMujeres en los olimpicos
Mujeres en los olimpicosVictoria Mendez
 
Gabarito da 6ª lista de geometria
Gabarito da 6ª lista de geometriaGabarito da 6ª lista de geometria
Gabarito da 6ª lista de geometriaProfessor Carlinhos
 
Opowieści w Sieci – interaktywny storytelling
Opowieści w Sieci – interaktywny storytellingOpowieści w Sieci – interaktywny storytelling
Opowieści w Sieci – interaktywny storytellingJacek Szlak
 
Sobre evaluacion 2
Sobre evaluacion 2Sobre evaluacion 2
Sobre evaluacion 2hermalazarte
 
Bachillerato uas virtual
Bachillerato uas virtualBachillerato uas virtual
Bachillerato uas virtualclaudia_ovalles
 
Desculpa por acaso és uma bruxa
Desculpa por acaso és uma bruxaDesculpa por acaso és uma bruxa
Desculpa por acaso és uma bruxabecrecv
 
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-publishdaniel kaligis
 
apresentação_Onideia 2015
apresentação_Onideia 2015apresentação_Onideia 2015
apresentação_Onideia 2015Jaques Projetos
 
Curso hist diapos
Curso hist diaposCurso hist diapos
Curso hist diaposlisG
 
Papel vs plástico ingrata dolencia
Papel vs plástico   ingrata dolenciaPapel vs plástico   ingrata dolencia
Papel vs plástico ingrata dolenciaMaria Justo
 
Com vestes de louvor e alegria
Com vestes de louvor e alegriaCom vestes de louvor e alegria
Com vestes de louvor e alegriaIMQ
 
Reunion arciprestes
Reunion arciprestesReunion arciprestes
Reunion arciprestesZopacrisa
 

En vedette (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
 

Similaire à 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 2012Dmytro Mindra
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняLuxoftTraining
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...HappyDev
 
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 ...Alex V. Petrov
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Fwdays
 
Оценка проектов тестирования
Оценка проектов тестированияОценка проектов тестирования
Оценка проектов тестированияRina Uzhevko
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsAnton Vidishchev
 
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
 Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва  Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва it-people
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.Igor Shkulipa
 
Использование Mock-объектов в TDD на платформе .NET
Использование Mock-объектов в TDD на платформе .NETИспользование Mock-объектов в TDD на платформе .NET
Использование Mock-объектов в TDD на платформе .NETPavel Treshnikov
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...Mail.ru Group
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
 
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 codeDmytro Mindra
 
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...Ontico
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 

Similaire à 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.
 

Plus de Anton Katkov

AgileDays'14 - современная разработка под iOS
AgileDays'14 - современная разработка под iOSAgileDays'14 - современная разработка под iOS
AgileDays'14 - современная разработка под iOSAnton 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 overviewAnton Katkov
 
AgileDays'12 - Continuous deployment
AgileDays'12 - Continuous deploymentAgileDays'12 - Continuous deployment
AgileDays'12 - Continuous deploymentAnton Katkov
 
AgileCamp’11 Новосибирск - Test Driven Development (TDD)
AgileCamp’11 Новосибирск - Test Driven Development (TDD)AgileCamp’11 Новосибирск - Test Driven Development (TDD)
AgileCamp’11 Новосибирск - Test Driven Development (TDD)Anton Katkov
 
AgileCamp’11 Новосибирск - Continuous Integration (CI)
AgileCamp’11 Новосибирск - Continuous Integration (CI)AgileCamp’11 Новосибирск - Continuous Integration (CI)
AgileCamp’11 Новосибирск - Continuous Integration (CI)Anton Katkov
 
AgileCamp'11 Новосибирск - Unit Tests
AgileCamp'11 Новосибирск - Unit TestsAgileCamp'11 Новосибирск - Unit Tests
AgileCamp'11 Новосибирск - Unit TestsAnton Katkov
 
AgileCamp'11 Новосибирск - введение в инженерные практики
AgileCamp'11 Новосибирск - введение в инженерные практикиAgileCamp'11 Новосибирск - введение в инженерные практики
AgileCamp'11 Новосибирск - введение в инженерные практикиAnton Katkov
 

Plus 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