Upgrade to Pro — share decks privately, control downloads, hide ads and more …

開発を効率化するテストのデザインパターン

 開発を効率化するテストのデザインパターン

2017/3/13 iOS Test Night #3
https://testnight.connpass.com/event/49561/

151a0b14f5914e786e2e104cfb3a9b2f?s=128

Kuniwak

March 13, 2017
Tweet

Transcript

  1. ։ൃΛޮ཰Խ͢Δ
 ςετͷσβΠϯύλʔϯ

  2. "CPVUNF

  3. 4XJGUϲ݄໨ͷਓؒ ࢦఠɾΞυόΠε׻ܴʂ

  4. ࠓ೔঺հ͢Δύλʔϯ

  5. ܕʹΑΔ๷ޚ

  6. ςετ
 ༰қઃܭ

  7. ςετͷ
 ߏ଄Խ

  8. σόοάͷ
 ޮ཰Խ

  9. લͷ΋ͷ΄ͲΦεεϝ

  10. ࣮૷ྫ͋Γ·͢

  11. None
  12. None
  13. ܕʹΑΔ๷ޚ

  14. ͦ΋ͦ΋ςετͬͯ
 ޮ཰తͳͷͩΖ͏͔ʁ

  15. ߏจϋΠϥΠτ Ϧϯτ ੩తܕݕࠪ ୯ମɾ݁߹ςετ &&ςετ खಈಈ࡞֬ೝ όά9Λݟ͚ͭͨ৔ॴ όά9

  16. ߏจϋΠϥΠτ Ϧϯτ ੩తܕݕࠪ ୯ମɾ݁߹ςετ &&ςετ खಈಈ࡞֬ೝ όά" ্ͷํͰࢭ·Δͱ ॴཁ͕࣌ؒ୹͍ όά#

    ςετͩͱ͕࣌ؒ
 ͔͔Δ
  17. ͳΔ΂͘ςετલʹ
 όάΛݟ͚͍ͭͨ ͜Ε͕ޮ཰త

  18. Semantic Type σβΠϯύλʔϯ

  19. จࣈྻͱͯ͠ͷૢ࡞͸
 ඞཁͳ͍ͷͰӅ͢ ҙຯʹΑΔಠࣗܕ 5FTUBCMF%FTJHO&YBNQMF(JU)VC(JU)VC6TFSTXJGU--

  20. Ϣʔβʔ໊Λड͚औΕΔ
 ؔ਺ʹ͔͠౉ͤͳ͍ 5FTUBCMF%FTJHO&YBNQMF(JU)VC(JU)VC3FQPTJUPSZTXJGU--

  21. ؒҧͬͨॲཧΛॻ͖ͮΒ͍
 
 Մಡੑ΋ߴ·Δ

  22. Registration Token σβΠϯύλʔϯ

  23. ඞཁͳࣄલͷॲཧΛ
 ๨Εͳ͍Α͏ʹ͢Δύλʔϯ

  24. 5PLFO͕ඞཁ 5BCMF7JFX$FMMΛ࡞Δؔ਺ 5FTUBCMF%FTJHO&YBNQMF.WD"SDIJUFDUVSF4UBSHB[FST4UBSHB[FS$FMMTXJGU--

  25. উखʹ࡞Εͳ͍ ొ࿥͢ΔͱೖखͰ͖Δ 5FTUBCMF%FTJHO&YBNQMF.WD"SDIJUFDUVSF4UBSHB[FST4UBSHB[FS$FMMTXJGU--

  26. ඞཁͳࣄલͷॲཧΛ๨ΕΔͱ
 ܕݕࠪʹ௨Βͳ͍

  27. ςετ
 ༰қઃܭ

  28. ਓؒ͸ςετ༰қͳ
 ΋ͷ͔͠ςετͰ͖ͳ͍

  29. ViewController
 Factory σβΠϯύλʔϯ

  30. 3FOBNFͳͲͰ
 4UPSZCPBSEͱͷ੔߹ੑ͸
 ؆୯ʹյΕΔ 5)&ݫ͍͠

  31. 7JFX$POUSPMMFSͷ࡞੒ؔ਺ 'PSDF6OXSBQܕ͸͜͜Ͱଋറ 5FTUBCMF%FTJHO&YBNQMF.WD"SDIJUFDUVSF4UBSHB[FST4UBSHB[FST.WD$PNQPTFSTXJGU--

  32. ͜͜Ͱ׆͖Δ 7JFX$POUSPMMFSͱ4UPSZCPBSEͷ੔߹ੑΛݕূ 5FTUBCMF%FTJHO&YBNQMF5FTUT.WD"SDIJUFDUVSF4UBSHB[FS.WD$PNQPTFS5FTUTTXJGU

  33. ΋͠࡞Εͳ͔ͬͨΒҟৗ ࣮ࡍʹදࣔ·Ͱ࣮ߦ 5FTUBCMF%FTJHO&YBNQMF5FTUT/BWJHBUPS5FTU/BWJHBUPSTXJGU

  34. State-Machine
 Model σβΠϯύλʔϯ

  35. .7 ͷ.PEFMͷ
 ໢ཏςετ͸೉͍͠ ໢ཏ͖͠Εͳ͍ʂ

  36. .PEFMͷঢ়ଶભҠΛ੍ݶ ͔ͩΒ

  37. .firstFetching .fetched(.success(x)) .fetching(.success(x)) .fetched(.failure(e)) .fetching(.failure(e)) FOVN͕ศར 5FTUBCMF%FTJHO&YBNQMF.WD"SDIJUFDUVSF4UBSHB[FST4UBSHB[FST.PEFMTXJGU--

  38. ͦΕͧΕͷ໼ҹΛ
 ౓ςετ͢Δ͚ͩͰΑ͍

  39. .firstFetching .fetched(.success(x)) .fetching(.success(x)) .fetched(.failure(e)) .fetching(.failure(e)) ͜ͷྫͰ͸ຊͰ໢ཏ 5FTUBCMF%FTJHO&YBNQMF.WD"SDIJUFDUVSF4UBSHB[FST4UBSHB[FST.PEFMTXJGU--

  40. ঢ়ଶ਺͕രൃ͢Δલʹ
 ঢ়ଶ਺Λ੍ݶͯ͠ѹ౗త໢ཏ

  41. ςετͷ
 ߏ଄Խ

  42. ςετ͕૿͑ΔʹͭΕ
 ςετࣗମͷอकੑ͕ॏཁʹͳΔ

  43. Parameterized
 Test σβΠϯύλʔϯ

  44. ྨࣅͨ͠ςετέʔε͕
 ଟ͍৔߹ͷύλʔϯ

  45. ςετέʔεΛ σʔλߏ଄ʹམͱ͢ ෳ਺ͷςετέʔεΛ·ͱΊΔ 5FTUT.JSSPS%J⒎,JU5FTUT%J⒎BCMF4FU5FTUTTXJGU- ˞͍͍ྫ͕αϯϓϧʹͳ͔ͬͨͷͰผ͔Βर͍ͬͯ·͢ɻ

  46. ςετέʔε͸ϧʔϓͰ࣮ߦ͢Δ 5FTUT.JSSPS%J⒎,JU5FTUT%J⒎BCMF4FU5FTUTTXJGU- ˞͍͍ྫ͕αϯϓϧʹͳ͔ͬͨͷͰผ͔Βर͍ͬͯ·͢ɻ

  47. ςετέʔεΛྔ࢈Ͱ͖Δ 5FTUT.JSSPS%J⒎,JU5FTUT%J⒎BCMF4FU5FTUTTXJGU- ˞͍͍ྫ͕αϯϓϧʹͳ͔ͬͨͷͰผ͔Βर͍ͬͯ·͢ɻ

  48. MJOFΛLFZʹ͢Δͱ
 ৔ॴ͕Θ͔Γ΍͍͢ 5FTUT.JSSPS%J⒎,JU5FTUT%J⒎BCMF4FU5FTUTTXJGU- ˞͍͍ྫ͕αϯϓϧʹͳ͔ͬͨͷͰผ͔Βर͍ͬͯ·͢ɻ

  49. Promisified
 Test σβΠϯύλʔϯ

  50. ඇಉظςετ͸೰Έ͕ଟ͍ ಡΈͮΒ͍͜ͱ͕ଟ͍

  51. None
  52. Ұํ+4քͰ͸1SPNJTFʹ
 ΑΔඇಉظςετ͕༏੎ ඇಉظͳ஋ͷऔಘͷσβΠϯύλʔϯ

  53. J04Ͱ΋࢖͍͍ͨʜ

  54. None
  55. BTZODͱ͍͏
 ؔ਺ͰแΉ ςετέʔε͸
 1SPNJTFΛฦ͢ 5FTUBCMF%FTJHO&YBNQMF5FTUT(JU)VC(JU)VC"QJ5FTUTTXJGU

  56. 9$5FTU$BTF΁
 ͏·͘ϒϦοδ 1SPNJTF͕ղܾ͞ΕͨΒςετ੒ޭ غ٫͞ΕͨΒςετࣦഊ 5FTUBCMF%FTJHO&YBNQMF5FTUT"TZODTXJGU

  57. ಡΈ΍͍͢
 
 ॻ͖΍͍͢

  58. σόοάͷ
 ޮ཰Խ

  59. Diff
 Assertion σβΠϯύλʔϯ

  60. Α͋͘Δςετ .JSSPS%J⒎,JU3&"%.&NE

  61. ಡΊ͵

  62. ։ൃ͠·ͨ͠

  63. ͜͏͢Δͱʜ .JSSPS%J⒎,JU3&"%.&NE

  64. None
  65. .JSSPSͱ͍͏3FqFDUJPO"1*Λ ࢖ͬͯɺߏ଄తͳEJ⒎Λܭࢉ

  66. ࢖ͬͯΈ͍ͯͩ͘͞ʂ ˒΋Β͑Δͱخ͍͠Ͱ͢ʂ

  67. ·ͱΊ ͞·͟·ͳύλʔϯΛۦ࢖ͯ͠
 ޮ཰తʹ։ൃ͠·͠ΐ͏

  68. Φεεϝͷࢿྉ ςετքͰ͸௒༗໊ͳ
 σβύλຊ ϞοΫεύΠελϒͷ ఆٛ΍ɺࠓ೔঺հͨ͠
 ύλʔϯͷൃ૝ݩ͕
 ͨ͘͞Μࡌͬͯ·͢