71
TDD in iOS Development by examples Marko Čičak Igor Stojanović

TDD in iOS Development by examples Marko Čičak Igor Stojanović

Embed Size (px)

Citation preview

Page 1: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TDDin

iOSDevelopment

by examples

Marko ČičakIgor Stojanović

Page 2: TDD in iOS Development by examples Marko Čičak Igor Stojanović

AGENDA1: TDD - how we started with

2: A full cup of TDD

3: Conclusion

4: Questions

Page 3: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TDD – HOW WE STARTED

- Java testing tools:

- JUnit

- TestNG

- Checkstyle

- FindBugs

- DbUnit

- Sonar

......

Page 4: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TDD – HOW WE STARTED

- Do you write tests for your iOS applications?

“The best testing is when I see how application works on my mobile device.”

Page 5: TDD in iOS Development by examples Marko Čičak Igor Stojanović

MOBILE DEV. IS HARDComplex applications

Page 6: TDD in iOS Development by examples Marko Čičak Igor Stojanović

MOBILE DEV. IS HARDLots of code

Page 7: TDD in iOS Development by examples Marko Čičak Igor Stojanović

MOBILE DEV. IS HARDSmooth scrolling

Page 8: TDD in iOS Development by examples Marko Čičak Igor Stojanović

MOBILE DEV. IS HARDOffline mode

Page 9: TDD in iOS Development by examples Marko Čičak Igor Stojanović

MOBILE DEV. IS HARDState restoration

Page 10: TDD in iOS Development by examples Marko Čičak Igor Stojanović

MOBILE DEV. IS HARD

Page 11: TDD in iOS Development by examples Marko Čičak Igor Stojanović

MOBILE DEV. IS HARD

- Lots of code.

- No tests.

- Hard to develop and maintain.

- “It doesn’t work but it worked in previous versions.”

- Why didn’t you write tests?

“We didn’t have time”

Page 12: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TDD – HOW WE STARTEDNovember 2013 – CenterDevice iPhone client

- How to test?

- KIF, Frank, Appium, Zucchini, Calabash, UIAutomation...

- Guidelines:

Objective-C

Small learning curve

Easy to write and maintain

Fast execution

Page 13: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TDD – HOW WE STARTEDNovember 2013 – CenterDevice iPhone client

Page 14: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TDD – HOW WE STARTED

Page 15: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TDD

Page 16: TDD in iOS Development by examples Marko Čičak Igor Stojanović

APP DEMO

Page 17: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TDD – NEW PROJECT

Page 18: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TDD – NEW PROJECT

Page 19: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TDD – NEW PROJECT

Page 20: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TDD – NEW PROJECT

Page 21: TDD in iOS Development by examples Marko Čičak Igor Stojanović
Page 22: TDD in iOS Development by examples Marko Čičak Igor Stojanović
Page 23: TDD in iOS Development by examples Marko Čičak Igor Stojanović
Page 24: TDD in iOS Development by examples Marko Čičak Igor Stojanović
Page 25: TDD in iOS Development by examples Marko Čičak Igor Stojanović
Page 26: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TEST APP DELEGATE

Page 27: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TEST APP DELEGATE

Page 28: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TEST APP DELEGATE

Page 29: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TEST APP DELEGATE

Page 30: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TEST APP DELEGATE

Page 31: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TEST APP DELEGATE

Page 32: TDD in iOS Development by examples Marko Čičak Igor Stojanović

SINGLETONS

Page 33: TDD in iOS Development by examples Marko Čičak Igor Stojanović

SINGLETONS

Page 34: TDD in iOS Development by examples Marko Čičak Igor Stojanović

SINGLETONS

Page 35: TDD in iOS Development by examples Marko Čičak Igor Stojanović

SINGLETONS

Page 36: TDD in iOS Development by examples Marko Čičak Igor Stojanović

XCTESTCASE

Page 37: TDD in iOS Development by examples Marko Čičak Igor Stojanović
Page 38: TDD in iOS Development by examples Marko Čičak Igor Stojanović

VIEW MODEL

Page 39: TDD in iOS Development by examples Marko Čičak Igor Stojanović

VIEW MODEL

Page 40: TDD in iOS Development by examples Marko Čičak Igor Stojanović

VIEW MODEL

Page 41: TDD in iOS Development by examples Marko Čičak Igor Stojanović

VIEW MODEL

Page 42: TDD in iOS Development by examples Marko Čičak Igor Stojanović

VIEW MODEL

Page 43: TDD in iOS Development by examples Marko Čičak Igor Stojanović

CORE DATA

Page 44: TDD in iOS Development by examples Marko Čičak Igor Stojanović

CORE DATA

Page 45: TDD in iOS Development by examples Marko Čičak Igor Stojanović

CORE DATA

Page 46: TDD in iOS Development by examples Marko Čičak Igor Stojanović

DATA PROVIDER

Page 47: TDD in iOS Development by examples Marko Čičak Igor Stojanović

DATA PROVIDER

Page 48: TDD in iOS Development by examples Marko Čičak Igor Stojanović
Page 49: TDD in iOS Development by examples Marko Čičak Igor Stojanović
Page 50: TDD in iOS Development by examples Marko Čičak Igor Stojanović

DATA PROVIDER

Page 51: TDD in iOS Development by examples Marko Čičak Igor Stojanović

DATA PROVIDER

Page 52: TDD in iOS Development by examples Marko Čičak Igor Stojanović

PROBLEM WITH ANIMATIONS

Page 53: TDD in iOS Development by examples Marko Čičak Igor Stojanović

PROBLEM WITH ANIMATIONS

Page 54: TDD in iOS Development by examples Marko Čičak Igor Stojanović

PROBLEM WITH ANIMATIONSWhat’s wrong with this code?

Page 55: TDD in iOS Development by examples Marko Čičak Igor Stojanović

PROBLEM WITH ANIMATIONS

Page 56: TDD in iOS Development by examples Marko Čičak Igor Stojanović

PROBLEM WITH ANIMATIONS

Page 57: TDD in iOS Development by examples Marko Čičak Igor Stojanović

LOCALISATION

Page 58: TDD in iOS Development by examples Marko Čičak Igor Stojanović

LOCALISATION

Page 59: TDD in iOS Development by examples Marko Čičak Igor Stojanović

LOCALISATION

Page 60: TDD in iOS Development by examples Marko Čičak Igor Stojanović

MODAL VIEWS

Page 61: TDD in iOS Development by examples Marko Čičak Igor Stojanović

MODAL VIEWS

Page 62: TDD in iOS Development by examples Marko Čičak Igor Stojanović

MODAL VIEWS

Page 63: TDD in iOS Development by examples Marko Čičak Igor Stojanović

ALERT VIEWS

Page 64: TDD in iOS Development by examples Marko Čičak Igor Stojanović

ALERT VIEWS

Page 65: TDD in iOS Development by examples Marko Čičak Igor Stojanović

BENEFITS

- Early recognition if something is missing or not well specified.

- Tells you whether your last change or refactoring broke existing functionality.

- Prevents regression and future bugs

- New developer can figure out business logic through tests.

- Less time spent in debugging.

- Forces you to write small classes etc...

Page 66: TDD in iOS Development by examples Marko Čičak Igor Stojanović

DISADVANTAGES

- It’s not trivial to learn because we didn’t used to write tests firsts.

- Could impact design.

- Code refactoring may impact tests.

- Can be short sighted.

Page 67: TDD in iOS Development by examples Marko Čičak Igor Stojanović

OTHER TOOLS FOR TDD

- Expecta – XCTest extension

- OCMock – Helper for easier creation of stub objects

- Specta – TDD/BDD framework for Objective-C

- FBSnapshotTestCase – Snapshot view unit tests for iOS

- OCHamcrest - Hamcrest for Objective-C

- OCMockito

.....

Page 68: TDD in iOS Development by examples Marko Čičak Igor Stojanović

CONCLUSIONTDD IS ONE MORE TOOL

IN YOUR DEVELOPER TOOLBOX

Page 69: TDD in iOS Development by examples Marko Čičak Igor Stojanović

TESTING TOOLS

- KIF - https://github.com/kif-framework/KIF

- Zucchini - https://github.com/playup/zucchini

- Appium - http://appium.io

- Calabash - https://github.com/calabash/calabash-ios

- OCMock - http://ocmock.org

- Expecta - https://github.com/specta/expecta

- Specta - https://github.com/specta/specta

- FBSnapshotTestCase - https://github.com/facebook/ios-snapshot-test-case

- OCHamcrest - https://github.com/hamcrest/OCHamcrest

- OCMockito - https://github.com/jonreid/OCMockito

Page 70: TDD in iOS Development by examples Marko Čičak Igor Stojanović

INTERESTING READ- Test-Driven iOS Developmet by Graham Lee

http://www.amazon.com/Test-Driven-iOS-Development-Developers-Library/dp/0321774183

- Test-Driven Development by Example by Kent Beck

http://www.amazon.com/Test-Driven-Development-By-Example/dp/0321146530

- Pseudo-Localization for Cocoa Apps – blog by Daniel Schneller

https://blog.codecentric.de/en/2013/10/pseudo-localization-cocoa-apps/

- Test-driven development - wikipedia

http://en.wikipedia.org/wiki/Test-driven_development

- Unit Testing Notification Observing on iOS – blog by Nikola Lajic

https://blog.codecentric.de/en/2014/09/unit-testing-notification-observing-ios/

Page 71: TDD in iOS Development by examples Marko Čičak Igor Stojanović

QUESTIONS