2017/3/13 iOS Test Night #3 https://testnight.connpass.com/event/49561/
։ൃΛޮԽ͢Δ ςετͷσβΠϯύλʔϯ
View Slide
"CPVUNF
4XJGUϲ݄ͷਓؒࢦఠɾΞυόΠεܴʂ
ࠓհ͢Δύλʔϯ
ܕʹΑΔޚ
ςετ ༰қઃܭ
ςετͷ ߏԽ
σόοάͷ ޮԽ
લͷͷ΄ͲΦεεϝ
࣮ྫ͋Γ·͢
ͦͦςετͬͯ ޮతͳͷͩΖ͏͔ʁ
ߏจϋΠϥΠτϦϯτ੩తܕݕࠪ୯ମɾ݁߹ςετ&&ςετखಈಈ࡞֬ೝόά9Λݟ͚ͭͨॴόά9
ߏจϋΠϥΠτϦϯτ੩తܕݕࠪ୯ମɾ݁߹ςετ&&ςετखಈಈ࡞֬ೝόά"্ͷํͰࢭ·Δͱॴཁ͕͍࣌ؒόά#ςετͩͱ͕࣌ؒ ͔͔Δ
ͳΔ͘ςετલʹ όάΛݟ͚͍ͭͨ͜Ε͕ޮత
Semantic TypeσβΠϯύλʔϯ
จࣈྻͱͯ͠ͷૢ࡞ ඞཁͳ͍ͷͰӅ͢ҙຯʹΑΔಠࣗܕ5FTUBCMF%FTJHO&YBNQMF(JU)VC(JU)VC6TFSTXJGU--
Ϣʔβʔ໊Λड͚औΕΔ ؔʹ͔ͤ͠ͳ͍5FTUBCMF%FTJHO&YBNQMF(JU)VC(JU)VC3FQPTJUPSZTXJGU--
ؒҧͬͨॲཧΛॻ͖ͮΒ͍ Մಡੑߴ·Δ
RegistrationTokenσβΠϯύλʔϯ
ඞཁͳࣄલͷॲཧΛ Εͳ͍Α͏ʹ͢Δύλʔϯ
5PLFO͕ඞཁ5BCMF7JFX$FMMΛ࡞Δؔ5FTUBCMF%FTJHO&YBNQMF.WD"SDIJUFDUVSF4UBSHB[FST4UBSHB[FS$FMMTXJGU--
উखʹ࡞Εͳ͍ొ͢ΔͱೖखͰ͖Δ5FTUBCMF%FTJHO&YBNQMF.WD"SDIJUFDUVSF4UBSHB[FST4UBSHB[FS$FMMTXJGU--
ඞཁͳࣄલͷॲཧΛΕΔͱ ܕݕࠪʹ௨Βͳ͍
ਓؒςετ༰қͳ ͷ͔͠ςετͰ͖ͳ͍
ViewController FactoryσβΠϯύλʔϯ
3FOBNFͳͲͰ 4UPSZCPBSEͱͷ߹ੑ ؆୯ʹյΕΔ5)&ݫ͍͠
7JFX$POUSPMMFSͷ࡞ؔ'PSDF6OXSBQܕ͜͜Ͱଋറ5FTUBCMF%FTJHO&YBNQMF.WD"SDIJUFDUVSF4UBSHB[FST4UBSHB[FST.WD$PNQPTFSTXJGU--
͜͜Ͱ׆͖Δ7JFX$POUSPMMFSͱ4UPSZCPBSEͷ߹ੑΛݕূ5FTUBCMF%FTJHO&YBNQMF5FTUT.WD"SDIJUFDUVSF4UBSHB[FS.WD$PNQPTFS5FTUTTXJGU
͠࡞Εͳ͔ͬͨΒҟৗ࣮ࡍʹදࣔ·Ͱ࣮ߦ5FTUBCMF%FTJHO&YBNQMF5FTUT/BWJHBUPS5FTU/BWJHBUPSTXJGU
State-Machine ModelσβΠϯύλʔϯ
.7 ͷ.PEFMͷ ཏςετ͍͠ཏ͖͠Εͳ͍ʂ
.PEFMͷঢ়ଶભҠΛ੍ݶ͔ͩΒ
.firstFetching.fetched(.success(x)).fetching(.success(x)).fetched(.failure(e)).fetching(.failure(e))FOVN͕ศར5FTUBCMF%FTJHO&YBNQMF.WD"SDIJUFDUVSF4UBSHB[FST4UBSHB[FST.PEFMTXJGU--
ͦΕͧΕͷҹΛ ςετ͢Δ͚ͩͰΑ͍
.firstFetching.fetched(.success(x)).fetching(.success(x)).fetched(.failure(e)).fetching(.failure(e))͜ͷྫͰຊͰཏ5FTUBCMF%FTJHO&YBNQMF.WD"SDIJUFDUVSF4UBSHB[FST4UBSHB[FST.PEFMTXJGU--
ঢ়ଶ͕രൃ͢Δલʹ ঢ়ଶΛ੍ݶͯ͠ѹతཏ
ςετ͕૿͑ΔʹͭΕ ςετࣗମͷอकੑ͕ॏཁʹͳΔ
Parameterized TestσβΠϯύλʔϯ
ྨࣅͨ͠ςετέʔε͕ ଟ͍߹ͷύλʔϯ
ςετέʔεΛσʔλߏʹམͱ͢ෳͷςετέʔεΛ·ͱΊΔ5FTUT.JSSPS%J⒎,JU5FTUT%J⒎BCMF4FU5FTUTTXJGU-˞͍͍ྫ͕αϯϓϧʹͳ͔ͬͨͷͰผ͔Βर͍ͬͯ·͢ɻ
ςετέʔεϧʔϓͰ࣮ߦ͢Δ5FTUT.JSSPS%J⒎,JU5FTUT%J⒎BCMF4FU5FTUTTXJGU-˞͍͍ྫ͕αϯϓϧʹͳ͔ͬͨͷͰผ͔Βर͍ͬͯ·͢ɻ
ςετέʔεΛྔ࢈Ͱ͖Δ5FTUT.JSSPS%J⒎,JU5FTUT%J⒎BCMF4FU5FTUTTXJGU-˞͍͍ྫ͕αϯϓϧʹͳ͔ͬͨͷͰผ͔Βर͍ͬͯ·͢ɻ
MJOFΛLFZʹ͢Δͱ ॴ͕Θ͔Γ͍͢5FTUT.JSSPS%J⒎,JU5FTUT%J⒎BCMF4FU5FTUTTXJGU-˞͍͍ྫ͕αϯϓϧʹͳ͔ͬͨͷͰผ͔Βर͍ͬͯ·͢ɻ
Promisified TestσβΠϯύλʔϯ
ඇಉظςετΈ͕ଟ͍ಡΈͮΒ͍͜ͱ͕ଟ͍
Ұํ+4քͰ1SPNJTFʹ ΑΔඇಉظςετ͕༏ඇಉظͳͷऔಘͷσβΠϯύλʔϯ
J04Ͱ͍͍ͨʜ
BTZODͱ͍͏ ؔͰแΉςετέʔε 1SPNJTFΛฦ͢5FTUBCMF%FTJHO&YBNQMF5FTUT(JU)VC(JU)VC"QJ5FTUTTXJGU
9$5FTU$BTF ͏·͘ϒϦοδ1SPNJTF͕ղܾ͞ΕͨΒςετޭغ٫͞ΕͨΒςετࣦഊ5FTUBCMF%FTJHO&YBNQMF5FTUT"TZODTXJGU
ಡΈ͍͢ ॻ͖͍͢
Diff AssertionσβΠϯύλʔϯ
Α͋͘Δςετ.JSSPS%J⒎,JU3&"%.&NE
ಡΊ͵
։ൃ͠·ͨ͠
͜͏͢Δͱʜ.JSSPS%J⒎,JU3&"%.&NE
.JSSPSͱ͍͏3FqFDUJPO"1*ΛͬͯɺߏతͳEJ⒎Λܭࢉ
ͬͯΈ͍ͯͩ͘͞ʂ˒Β͑Δͱخ͍͠Ͱ͢ʂ
·ͱΊ͞·͟·ͳύλʔϯΛۦͯ͠ ޮతʹ։ൃ͠·͠ΐ͏
ΦεεϝͷࢿྉςετքͰ༗໊ͳ σβύλຊϞοΫεύΠελϒͷఆٛɺࠓհͨ͠ ύλʔϯͷൃݩ͕ ͨ͘͞Μࡌͬͯ·͢