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/

Kuniwak

March 13, 2017
Tweet

More Decks by Kuniwak

Other Decks in Programming

Transcript

  1. ։ൃΛޮ཰Խ͢Δ

    ςετͷσβΠϯύλʔϯ

    View Slide

  2. "CPVUNF

    View Slide

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

    View Slide

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

    View Slide

  5. ܕʹΑΔ๷ޚ

    View Slide

  6. ςετ

    ༰қઃܭ

    View Slide

  7. ςετͷ

    ߏ଄Խ

    View Slide

  8. σόοάͷ

    ޮ཰Խ

    View Slide

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

    View Slide

  10. ࣮૷ྫ͋Γ·͢

    View Slide

  11. View Slide

  12. View Slide

  13. ܕʹΑΔ๷ޚ

    View Slide

  14. ͦ΋ͦ΋ςετͬͯ

    ޮ཰తͳͷͩΖ͏͔ʁ

    View Slide

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

    View Slide

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

    ͔͔Δ

    View Slide

  17. ͳΔ΂͘ςετલʹ

    όάΛݟ͚͍ͭͨ
    ͜Ε͕ޮ཰త

    View Slide

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

    View Slide

  19. จࣈྻͱͯ͠ͷૢ࡞͸

    ඞཁͳ͍ͷͰӅ͢
    ҙຯʹΑΔಠࣗܕ
    5FTUBCMF%FTJHO&YBNQMF(JU)VC(JU)VC6TFSTXJGU--

    View Slide

  20. Ϣʔβʔ໊Λड͚औΕΔ

    ؔ਺ʹ͔͠౉ͤͳ͍
    5FTUBCMF%FTJHO&YBNQMF(JU)VC(JU)VC3FQPTJUPSZTXJGU--

    View Slide

  21. ؒҧͬͨॲཧΛॻ͖ͮΒ͍


    Մಡੑ΋ߴ·Δ

    View Slide

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

    View Slide

  23. ඞཁͳࣄલͷॲཧΛ

    ๨Εͳ͍Α͏ʹ͢Δύλʔϯ

    View Slide

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

    View Slide

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

    View Slide

  26. ඞཁͳࣄલͷॲཧΛ๨ΕΔͱ

    ܕݕࠪʹ௨Βͳ͍

    View Slide

  27. ςετ

    ༰қઃܭ

    View Slide

  28. ਓؒ͸ςετ༰қͳ

    ΋ͷ͔͠ςετͰ͖ͳ͍

    View Slide

  29. ViewController

    Factory
    σβΠϯύλʔϯ

    View Slide

  30. 3FOBNFͳͲͰ

    4UPSZCPBSEͱͷ੔߹ੑ͸

    ؆୯ʹյΕΔ
    5)&ݫ͍͠

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  34. State-Machine

    Model
    σβΠϯύλʔϯ

    View Slide

  35. .7 ͷ.PEFMͷ

    ໢ཏςετ͸೉͍͠
    ໢ཏ͖͠Εͳ͍ʂ

    View Slide

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

    View Slide

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

    View Slide

  38. ͦΕͧΕͷ໼ҹΛ

    ౓ςετ͢Δ͚ͩͰΑ͍

    View Slide

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

    View Slide

  40. ঢ়ଶ਺͕രൃ͢Δલʹ

    ঢ়ଶ਺Λ੍ݶͯ͠ѹ౗త໢ཏ

    View Slide

  41. ςετͷ

    ߏ଄Խ

    View Slide

  42. ςετ͕૿͑ΔʹͭΕ

    ςετࣗମͷอकੑ͕ॏཁʹͳΔ

    View Slide

  43. Parameterized

    Test
    σβΠϯύλʔϯ

    View Slide

  44. ྨࣅͨ͠ςετέʔε͕

    ଟ͍৔߹ͷύλʔϯ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  48. MJOFΛLFZʹ͢Δͱ

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

    View Slide

  49. Promisified

    Test
    σβΠϯύλʔϯ

    View Slide

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

    View Slide

  51. View Slide

  52. Ұํ+4քͰ͸1SPNJTFʹ

    ΑΔඇಉظςετ͕༏੎
    ඇಉظͳ஋ͷऔಘͷσβΠϯύλʔϯ

    View Slide

  53. J04Ͱ΋࢖͍͍ͨʜ

    View Slide

  54. View Slide

  55. BTZODͱ͍͏

    ؔ਺ͰแΉ
    ςετέʔε͸

    1SPNJTFΛฦ͢
    5FTUBCMF%FTJHO&YBNQMF5FTUT(JU)VC(JU)VC"QJ5FTUTTXJGU

    View Slide

  56. 9$5FTU$BTF΁

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

    View Slide

  57. ಡΈ΍͍͢


    ॻ͖΍͍͢

    View Slide

  58. σόοάͷ

    ޮ཰Խ

    View Slide

  59. Diff

    Assertion
    σβΠϯύλʔϯ

    View Slide

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

    View Slide

  61. ಡΊ͵

    View Slide

  62. ։ൃ͠·ͨ͠

    View Slide

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

    View Slide

  64. View Slide

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

    View Slide

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

    View Slide

  67. ·ͱΊ
    ͞·͟·ͳύλʔϯΛۦ࢖ͯ͠

    ޮ཰తʹ։ൃ͠·͠ΐ͏

    View Slide

  68. Φεεϝͷࢿྉ
    ςετքͰ͸௒༗໊ͳ

    σβύλຊ
    ϞοΫεύΠελϒͷ
    ఆٛ΍ɺࠓ೔঺հͨ͠

    ύλʔϯͷൃ૝ݩ͕

    ͨ͘͞Μࡌͬͯ·͢

    View Slide