Алексей Демедецкий | Unit testing in swift

100
DO YOU WANT TO TALK ABOUT UNIT TESTIG IN SWIFT? #itsat @daloog ¯\_(ϑ)_/¯ Alexey Demedetskiy Sigma Software

Transcript of Алексей Демедецкий | Unit testing in swift

Page 1: Алексей Демедецкий | Unit testing in swift

DO YOU WANT TO TALK ABOUT UNIT TESTIG IN SWIFT?

#itsat @daloog

¯\_( )_/¯

Alexey Demedetskiy Sigma Software

Page 2: Алексей Демедецкий | Unit testing in swift

THANK YOU APPLE!

Page 3: Алексей Демедецкий | Unit testing in swift

99% OF IOS APPS ARE SHIPPED WITH UNIT TESTING!

Page 4: Алексей Демедецкий | Unit testing in swift

WORKOUT TIME!!

Page 5: Алексей Демедецкий | Unit testing in swift
Page 6: Алексей Демедецкий | Unit testing in swift

( °□°)

Page 7: Алексей Демедецкий | Unit testing in swift

ARE UNIT TESTS WORTH IT?HTTP://STACKOVERFLOW.COM/QUESTIONS/237000/IS-THERE-HARD-EVIDENCE-OF-THE-ROI-OF-UNIT-TESTING

Page 8: Алексей Демедецкий | Unit testing in swift

TIME += 30%HTTP://COLLABORATION.CSC.NCSU.EDU/LAURIE/PAPERS/TDDPAPERV8.PDF

Page 9: Алексей Демедецкий | Unit testing in swift

DEFECTS -= 60%HTTP://RESEARCH.MICROSOFT.COM/EN-US/GROUPS/ESE/NAGAPPAN_TDD.PDF

Page 10: Алексей Демедецкий | Unit testing in swift

TESTS ARE GREAT!

Page 11: Алексей Демедецкий | Unit testing in swift

!(ಠ ಠ!)

Page 12: Алексей Демедецкий | Unit testing in swift

WHY WE ARE NOT RUBY?

Page 13: Алексей Демедецкий | Unit testing in swift
Page 14: Алексей Демедецкий | Unit testing in swift

1) MARKET HUSTLE

Page 15: Алексей Демедецкий | Unit testing in swift

2) APPLE FRAMEWORKS

Page 16: Алексей Демедецкий | Unit testing in swift

3) LACK OF EXPERTISE

Page 17: Алексей Демедецкий | Unit testing in swift

4) OUTSOURCE

Page 18: Алексей Демедецкий | Unit testing in swift

⌛ ➡ 💰

Page 19: Алексей Демедецкий | Unit testing in swift

UNIT TESTS ARE WRITTEN BY DEVELOPERS.

Page 20: Алексей Демедецкий | Unit testing in swift
Page 21: Алексей Демедецкий | Unit testing in swift

TESTS ARE DEVELOPERS RESPONSIBILITY

Page 22: Алексей Демедецкий | Unit testing in swift

DON’T SELL THEM WRITE THEM

Page 23: Алексей Демедецкий | Unit testing in swift

WHY DO WE NEED TO WRITE TESTS?

Page 24: Алексей Демедецкий | Unit testing in swift

1) REFACTORING

Page 25: Алексей Демедецкий | Unit testing in swift

2) CONFIDENCE

Page 26: Алексей Демедецкий | Unit testing in swift

3) CATCHING ERRORS

Page 27: Алексей Демедецкий | Unit testing in swift

4) REGRESSION

Page 28: Алексей Демедецкий | Unit testing in swift

🐞➡❌➡⌨➡✅

Page 29: Алексей Демедецкий | Unit testing in swift

HOW TO WRITE TESTS?

Page 30: Алексей Демедецкий | Unit testing in swift

🍕 🛠

🌌

Page 31: Алексей Демедецкий | Unit testing in swift

UNITAS SMALLEST LOGIC CONTAINER

🍕

Page 32: Алексей Демедецкий | Unit testing in swift

FUNCTION

Page 33: Алексей Демедецкий | Unit testing in swift

INPUT ➡ OUTPUT

Page 34: Алексей Демедецкий | Unit testing in swift
Page 35: Алексей Демедецкий | Unit testing in swift
Page 36: Алексей Демедецкий | Unit testing in swift

PURE FUNCTIONS

Page 37: Алексей Демедецкий | Unit testing in swift

METHOD

Page 38: Алексей Демедецкий | Unit testing in swift

MUTATION OF STATE

Page 39: Алексей Демедецкий | Unit testing in swift
Page 40: Алексей Демедецкий | Unit testing in swift

VOID ➡ VOID

Page 41: Алексей Демедецкий | Unit testing in swift

INPUT ➡ OUTPUT

Page 42: Алексей Демедецкий | Unit testing in swift

DOMAIN == CODOMAIN

Page 43: Алексей Демедецкий | Unit testing in swift

ALL MY CODE IS FUNCTIONAL, WHERE EVERY FUNCTION TAKES ONE ARGUMENT: ALL MY PROGRAM'S STATE.

Page 44: Алексей Демедецкий | Unit testing in swift

OBJECT

Page 45: Алексей Демедецкий | Unit testing in swift
Page 46: Алексей Демедецкий | Unit testing in swift

DEPENDENCIES

Page 47: Алексей Демедецкий | Unit testing in swift

TRANSITIVE DEPENDENCIES

Page 48: Алексей Демедецкий | Unit testing in swift
Page 49: Алексей Демедецкий | Unit testing in swift

INITIAL STATE

Page 50: Алексей Демедецкий | Unit testing in swift

ORDER OF OPERATIONS

Page 51: Алексей Демедецкий | Unit testing in swift

UNITAS SMALLEST LOGIC CONTAINER

🍕

Page 52: Алексей Демедецкий | Unit testing in swift

🍕 🛠

🌌

Page 53: Алексей Демедецкий | Unit testing in swift

TESTS

🛠

Page 54: Алексей Демедецкий | Unit testing in swift

GWT

Page 55: Алексей Демедецкий | Unit testing in swift

GIVEN WHEN THEN

Page 56: Алексей Демедецкий | Unit testing in swift
Page 57: Алексей Демедецкий | Unit testing in swift

AAA

Page 58: Алексей Демедецкий | Unit testing in swift

ARRANGE ACT ASSERT

Page 59: Алексей Демедецкий | Unit testing in swift
Page 60: Алексей Демедецкий | Unit testing in swift

SRV

Page 61: Алексей Демедецкий | Unit testing in swift

SETUP RECORD VERIFY

Page 62: Алексей Демедецкий | Unit testing in swift

FUNCTIONS - GWT

Page 63: Алексей Демедецкий | Unit testing in swift

METHODS - AAA

Page 64: Алексей Демедецкий | Unit testing in swift

OBJECTS - SRV

Page 65: Алексей Демедецкий | Unit testing in swift

VALUE TESTS

Page 66: Алексей Демедецкий | Unit testing in swift

BEHAVIOR TESTS

Page 67: Алексей Демедецкий | Unit testing in swift

INTEGRATION TESTS

Page 68: Алексей Демедецкий | Unit testing in swift

CLIENT TESTS

Page 69: Алексей Демедецкий | Unit testing in swift

PYRAMID OF TESTSHTTP://TODDLITTLEWEB.COM/WORDPRESS/2014/06/23/THE-TESTING-DIAMOND-AND-THE-PYRAMID-2/

Page 70: Алексей Демедецкий | Unit testing in swift
Page 71: Алексей Демедецкий | Unit testing in swift
Page 72: Алексей Демедецкий | Unit testing in swift

TEST COVERAGEHTTP://MARTINFOWLER.COM/BLIKI/TESTCOVERAGE.HTML

Page 73: Алексей Демедецкий | Unit testing in swift
Page 74: Алексей Демедецкий | Unit testing in swift
Page 75: Алексей Демедецкий | Unit testing in swift

TESTS

🛠

Page 76: Алексей Демедецкий | Unit testing in swift

🍕 🛠

🌌

Page 77: Алексей Демедецкий | Unit testing in swift

SIDE EFFECTS

🌌

Page 78: Алексей Демедецкий | Unit testing in swift

RETURN VALUE

Page 79: Алексей Демедецкий | Unit testing in swift

FUNCTION CALL

Page 80: Алексей Демедецкий | Unit testing in swift

STATE CHANGE

Page 81: Алексей Демедецкий | Unit testing in swift

SIDE EFFECTS

🌌

Page 82: Алексей Демедецкий | Unit testing in swift

🍕 🛠

🌌

Page 83: Алексей Демедецкий | Unit testing in swift

SWIFT

Page 84: Алексей Демедецкий | Unit testing in swift

DEPENDENCIES

Page 85: Алексей Демедецкий | Unit testing in swift

STRUCT

Page 86: Алексей Демедецкий | Unit testing in swift

INTERNAL

Page 87: Алексей Демедецкий | Unit testing in swift
Page 88: Алексей Демедецкий | Unit testing in swift

PROTOCOL

Page 89: Алексей Демедецкий | Unit testing in swift

EXTERNAL

Page 90: Алексей Демедецкий | Unit testing in swift

XCTEST

Page 91: Алексей Демедецкий | Unit testing in swift

QUICK / NIMBLEHTTPS://GITHUB.COM/QUICK/QUICK

Page 92: Алексей Демедецкий | Unit testing in swift

RECORDERHTTPS://GIST.GITHUB.COM/ALEXEYDEMEDETSKIY/7A148559C81472A314F7

Page 93: Алексей Демедецкий | Unit testing in swift
Page 94: Алексей Демедецкий | Unit testing in swift

SWIFT

Page 95: Алексей Демедецкий | Unit testing in swift

🍕 🛠

🌌

Page 96: Алексей Демедецкий | Unit testing in swift

💻

Page 97: Алексей Демедецкий | Unit testing in swift

💻HTTPS://GITHUB.COM/XNEKOIX/FUNTIONALMVP

Page 98: Алексей Демедецкий | Unit testing in swift

HTTP://WWW.AMAZON.COM/WORKING-EFFECTIVELY-LEGACY-MICHAEL-FEATHERS/DP/0131177052

Page 99: Алексей Демедецкий | Unit testing in swift

HTTP://WWW.AMAZON.COM/EXTREME-PROGRAMMING-EXPLAINED-EMBRACE-EDITION/DP/0321278658

Page 100: Алексей Демедецкий | Unit testing in swift

QUESTIONS:

@DALOOG [email protected] NOBIDON