SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Practical Testing
in iOS
Slide 2
Slide 2 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Hello Devnot
Slide 3
Slide 3 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
2010 - Today
Slide 4
Slide 4 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
nsistanbul.com
Slide 5
Slide 5 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
kanvas.istanbul
Slide 6
Slide 6 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Slide 7
Slide 7 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
@seyfoyun
Slide 8
Slide 8 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Slide 9
Slide 9 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
iOS Testing Today
Slide 10
Slide 10 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Testing is standard for all
teams.
Slide 11
Slide 11 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
But is it?
Slide 12
Slide 12 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
PRACTICAL
Testing for iOS
Slide 13
Slide 13 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Why Tests?
Slide 14
Slide 14 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Results in more
modularized code
Slide 15
Slide 15 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Define better specs
Slide 16
Slide 16 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
As project grows larger,
saves your 🍑
Slide 17
Slide 17 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Types of Tests
Slide 18
Slide 18 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Unit Tests
Slide 19
Slide 19 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Unit → smallest piece
of code
Slide 20
Slide 20 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
fast.
Slide 21
Slide 21 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
small.
Slide 22
Slide 22 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
reliable.
Slide 23
Slide 23 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
8000
Shopify Android
Slide 24
Slide 24 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
10000
Airbnb iOS
Slide 25
Slide 25 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
30000
Nordstrom iOS
Slide 26
Slide 26 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
XCTest
Slide 27
Slide 27 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
XCTest
Slide 28
Slide 28 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Where to Write Unit
Tests?
Slide 29
Slide 29 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Custom Logic
Slide 30
Slide 30 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
View Models
Slide 31
Slide 31 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Presenters
Slide 32
Slide 32 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Routing
Slide 33
Slide 33 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Serialization
Slide 34
Slide 34 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Mutable State
Slide 35
Slide 35 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
State Machines
Slide 36
Slide 36 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Bindings
Slide 37
Slide 37 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Data Sources
Slide 38
Slide 38 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Data Stores
Slide 39
Slide 39 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Extensions
Slide 40
Slide 40 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Custom Classes
Slide 41
Slide 41 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
BDD (Behavior Driven
Development)
Slide 42
Slide 42 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Quick (Nimble)
Slide 43
Slide 43 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Slide 44
Slide 44 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Quick (Nimble) Advantages
• More matching methods
• Easier async tests
Slide 45
Slide 45 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Quick (Nimble)
• Easier async tests
Slide 46
Slide 46 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Mocking
Slide 47
Slide 47 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Mocker
Slide 48
Slide 48 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Mocker
Slide 49
Slide 49 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Mocker
Slide 50
Slide 50 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Integration Tests
Slide 51
Slide 51 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Integration Tests
Slide 52
Slide 52 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
UI Tests
Slide 53
Slide 53 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
UI Automation Tests
Slide 54
Slide 54 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
XCUITest
Slide 55
Slide 55 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
XCUITest
Slide 56
Slide 56 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
XCUITest
Slide 57
Slide 57 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
UI Automation Tests are
• Clunky (slow)
• Prone to errors
• Repetitive
Slide 58
Slide 58 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Appium
(JS, Python, Java, Ruby)
Slide 59
Slide 59 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
XCUITest
Slide 60
Slide 60 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Robot Pattern
Slide 61
Slide 61 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Robot Pattern
Slide 62
Slide 62 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Robot Pattern
Slide 63
Slide 63 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Robot Pattern
Slide 64
Slide 64 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Robot Pattern
Slide 65
Slide 65 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Robot Pattern
Slide 66
Slide 66 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Page Object Pattern
Slide 67
Slide 67 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Page Object Pattern
Slide 68
Slide 68 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Page Object Pattern
Slide 69
Slide 69 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Page Object Pattern
Slide 70
Slide 70 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Snapshot Tests
Slide 71
Slide 71 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Pass in static data
Slide 72
Slide 72 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Take screenshots of
different UIs & UI states
Slide 73
Slide 73 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Verify screenshots
Slide 74
Slide 74 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Turn record mode off
Slide 75
Slide 75 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
iOSSnapshotTestCase
(formerly FBSnapshotTestCase)
Slide 76
Slide 76 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
SnapshotTesting
Slide 77
Slide 77 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
SnapshotTesting
Slide 78
Slide 78 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
SnapshotTesting Downsides
• Repository can grow large after many
tests
• Some teams store reference images in
another repository
• Add CI jobs to fetch reference images
and run snapshot tests afterwards
Slide 79
Slide 79 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Are We Late to
Start Testing?
Slide 80
Slide 80 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Start by writing tests to
new features only
Slide 81
Slide 81 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Tests need to be written
when refactoring
Slide 82
Slide 82 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Code where bug fixes
are being made should
be tested
Slide 83
Slide 83 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Integration tests are a
good way to start
Slide 84
Slide 84 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Writing snapshot tests
are quick and easy
Slide 85
Slide 85 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Plus, you’ll have a
better connection with
your designer
Slide 86
Slide 86 text
SEYFEDDIN BASSARAC DEVNOT MOBILE 2023 APRIL 2023
@SEYFOYUN SEYFEDD.IN
Thank you.