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

Python ユニットテスト入門編 - ユニットテストの概念を学ぶ

Python ユニットテスト入門編 - ユニットテストの概念を学ぶ

以前主催した社内勉強会 "Testability exercise" の導入として説明した、ユニットの意義とその使い方の概念を掴むための資料です。
サーバーレス(およびServerless Framework)を扱う案件が社内的にも増加しているので、その手の話題も含まれています。

書いてある内容は発表当時の私の見解です。人により異論はあると思うのでフィードバックお待ちしています。

B84123138372542a55401c92b170b528?s=128

hassaku63

June 03, 2020
Tweet

Transcript

  1. Unittest ͷೖ໳ #testability-exercise

  2. ※͜ͷࢿྉ͸ࣾ಺޲͚ʹ։࠵ͨ͠ςετίʔυͷ
 ษڧձࢿྉΛ֎෦ެ։޲͚ʹ࠶ฤͨ͠΋ͷͰ͢

  3. Agenda 1. Unittest جຊ֓೦ 2. ࣮ફ

  4. Unittest جຊ֓೦

  5. What is ੾Γ཭͢͜ͱ͕Ͱ͖Δ࠷খͷίʔυϢχοτΛݕূ͢Δ΋ͷ • ԿΛʮ੾Γ཭͢ʯͷ͔ʁ • ྫʣӬଓԽ૚ʹΞΫηε͢Δػೳɺ֎෦APIʹϦΫΤετΛൃߦ͢Δػ ೳɺͳͲ • ݕূ݁Ռͷ߹൱ΛܾΊΔԿΒ͔ͷνΣοΫʢΞαʔγϣϯʣΛ

    ؚΉ
  6. Why (1/3) ίʔυͷઃܭ͕վળ͞ΕΔʢ࠷ॏཁʣ • ࣗ෼͕࡞ͬͨʮϢχοτʯ͕؆୯ʹςετͰ͖ͳ͍৔߹͸ɺԿ͔ͷઃܭ͕Πέͯͳ͍αΠϯ͔΋ • e.g) ςετέʔεͷηοτΞοϓ͕೉ղɹˠɹඞཁҎ্ʹʮঢ়ଶʯΛ͔࣋ͪ͗͢΋ʁ • ͦͷϢχοτ͕ա৒ʹ੹຿Λ࣋ͪ͗ͨ͢ઃܭʹͳ͍ͬͯΔ͔΋͠Εͳ͍ͱΘ͔Δ

    • ࣗ෼ͷઃܭΛʢΑΓϝϯςφϒϧͳߏ଄ʹ͢ΔͨΊʹʣධՁ͢Δ࡞ۀɺͱ΋ݴ͑Δ • ςετͮ͠Β͍ຊ൪ίʔυΛ໧ೝͯ͠ແཧ͘Γద߹ͤͯ͞͠·͏ͱɺϢχοτςετͷࢫຯ͕ݮΔ
  7. Why (2/3) Ҿ͖ܧ͗ޙͷ୲౰ऀ͕ιϑτ΢ΣΞͷ࢓༷Λཧղ͢ΔͨΊʹ໾ཱͭ • ։ൃͨ͠ίʔυ͕ຊ౰ʹՁ஋Λ΋ͨΒ͢ͷ͸։ൃ׬ྃ࣌఺Ͱ͸ͳ͘อकϑΣʔζͰ͋Δ • ίʔυ͸ɺॻ࣌ؒ͘ΑΓಡ·ΕΔ࣌ؒͷํ͕ଟ͍ • ෳࡶͰอकͮ͠Β͍ίʔυ͸ɺະདྷͷՁ஋ͷϙςϯγϟϧΛଛͳ͏ •

    ͦͷίʔυϢχοτΛͲͷΑ͏ʹ࢖͏΂͖͔ɺҙਤͨ͠࢓༷ɾ࢖͍ํΛਪ࡯Ͱ͖Δ • ※ͨͩ͠ɺdocstring ΍ͦͷଞͷυΩϡϝϯτʢશମߏ੒ʗઃܭࢥ૝ʗσϓϩΠαΠΫϧͷखॱͳͲʣ Λॆ࣮ͤ͞ΔͳͲɺଞʹ΋Ҿ͖ܧ͗ͷͨΊͷඞཁཁૉ͸͍͘ΒͰ΋͋Δ
  8. Why (3/3) Ϣχοτςετ͕ࣗಈςετͷૅʹͳΔʢ෭࣍తͳϝϦοτʣ • ࣗಈςετΛऔΓೖΕΔ͜ͱͰػೳվमͷݕূ͕εϐʔσΟʹͳΔ
 ʹՁ஋ΛੜΈग़͢αΠΫϧΛΑΓૣ͘ճͤΔ • ※ࣗಈςετͷલఏͱͯ͠ɺҙຯͷ͋ΔˍࣗಈԽ͠΍͍͢Ϣχοτςετ͕ॻ͚͍ͯΔ͜ͱ͕ॏཁ ʹͳΔ •

    ※ຊདྷతʹ͸Ϣχοτςετ͚ͩͰͳ݁͘߹ςετ΋ߦͬͯɺϢʔεέʔεతʹҙຯΛཻ࣋ͭ౓ͷ ςετ΋͋ͬͨํ͕Α͍
  9. How ʮ࣮૷͕ਖ਼͘͠ػೳ͍ͯ͠ΔͳΒ݁Ռ͸͜͏ͳΔ͸ͣʯΛݕূ • ಛఆ৚݅ʢҾ਺౳ʣΛ༩͑ͨ৔߹ͷ໭Γ஋Λݕূ • ςετର৅͕࢖༻͢Δ֎෦ػೳΛ૝ఆ௨Γݺͼग़ͤΔ͔Ͳ͏͔ • ૝ఆ௨ΓʹίέΔ͜ͱ΋ʮਖ਼͠͞ʯͷݕূʹͳΔ

  10. How ਖ਼ৗܥͷςετ

  11. How ਖ਼ৗܥͷςετ ظ଴͢Δೖྗʗग़ྗ Ξαʔγϣϯ

  12. How ҟৗܥͷςετ • int Ҏ֎ͷ৔߹͸
 ValueError ྫ֎Λ্͛Δ
 ࢓༷Λ௥Ճ

  13. How ҟৗܥͷςετ • int Ҏ֎ͷ৔߹͸
 ValueError ྫ֎Λ্͛Δ
 ࢓༷Λ௥Ճ ੔਺ܕҎ֎ͷέʔεʢ͜͜Ͱ͸จࣈྻܕʣΛ ਖ਼ৗʹ஄ͨ͘ΊͷόϦσʔγϣϯΛ௥Ճ

    BEE ʹจࣈྻΛೖྗ͢Δͱ 7BMVF&SSPSͰ ஄͔ΕΔ͜ͱΛݕূ
  14. How ผػೳͱͷ࿈ܞ͕͋Δؔ਺ͷ
 Ϣχοτςετ • ࿈ܞ͢ΔػೳΛμϛʔʹ
 ࠩ͠ସ͑Δ (mock) ࣮ྫ͸͜ͷޙͷ ϋϯζΦϯηογϣϯͷ෦Ͱ

  15. Mock ͱ͸ … ʁʁʁʁʁ

  16. Mock ผػೳͱͷ࿈ܞΛؚΉؔ਺ͷ
 Ϣχοτςετ • ࿈ܞ͢ΔػೳΛμϛʔʹ
 ࠩ͠ସ͑Δ (mock) ϝΠϯϩδοΫ ֎෦"1* %#ΞΫηε

    ɾɾɾ
  17. Mock ผػೳͱͷ࿈ܞ͕͋Δؔ਺ͷ
 Ϣχοτςετ • ࿈ܞ͢ΔػೳΛμϛʔʹ
 ࠩ͠ସ͑Δ (mock) ϝΠϯϩδοΫ ֎෦"1* %#ΞΫηε

    ɾɾɾ ͜ΕΛϢχοτςετ͍ͨ͠
  18. Mock ผػೳͱͷ࿈ܞ͕͋Δؔ਺ͷ
 Ϣχοτςετ • ࿈ܞ͢ΔػೳΛμϛʔʹ
 ࠩ͠ସ͑Δ (mock) ϝΠϯϩδοΫ ֎෦"1* %#ΞΫηε

    ɾɾɾ ϝΠϯͷςετΛ͢Δ্Ͱ͸ɺ ͍ͭ͜ΒͷӨڹ͕अຐ
  19. Mock ผػೳͱͷ࿈ܞ͕͋Δؔ਺ͷ
 Ϣχοτςετ • ࿈ܞ͢ΔػೳΛμϛʔʹ
 ࠩ͠ସ͑Δ (mock) ϝΠϯϩδοΫ ֎෦"1* NPDL

    %#ΞΫηε NPDL ɾɾɾ NBJOͷςετ࣌ͷΈɺ μϛʔʹࠩ͠ସ͑ΔNPDL
  20. Mock ผػೳͱͷ࿈ܞ͕͋Δؔ਺ͷ
 Ϣχοτςετ • ࿈ܞ͢ΔػೳΛμϛʔʹ
 ࠩ͠ସ͑Δ (mock) ϝΠϯϩδοΫ ֎෦"1* NPDL

    %#ΞΫηε NPDL ɾɾɾ ϝΠϯ͔Βར༻͢ΔTVCͷػೳʢؔ਺ͱ͔ʣ͕ μϛʔͷ஋Λฦ͢Α͏ʹઃఆ
  21. Mock ผػೳͱͷ࿈ܞ͕͋Δؔ਺ͷ
 Ϣχοτςετ • ࿈ܞ͢ΔػೳΛμϛʔʹ
 ࠩ͠ସ͑Δ (mock) ϝΠϯϩδοΫ ֎෦"1* NPDL

    %#ΞΫηε NPDL ɾɾɾ NBJOͷςετ࣌ͷΈɺ μϛʔʹࠩ͠ସ͑ΔNPDL ֎෦ӨڹΛഉআͯ͠ɺϝΠϯϩδοΫͷΈͷ ಈ࡞ΛݟΔ͜ͱ͕Ͱ͖Δ
  22. Mock ผػೳͱͷ࿈ܞ͕͋Δؔ਺ͷ
 Ϣχοτςετ • ࿈ܞ͢ΔػೳΛμϛʔʹ
 ࠩ͠ସ͑Δ (mock) ϝΠϯϩδοΫ ֎෦"1* NPDL

    %#ΞΫηε NPDL ɾɾɾ NPDLͨ͠ػೳΛʮͲ͏࢖ͬͨͷ͔ʯ؍఺ ˞ݺͼग़͠ͷҾ਺΍ɺͦͷճ਺ͳͲ
  23. Mock - Α͋͘Δ࢖ΘΕํ (1) ॴҦϢʔεέʔεʢػೳཁ݅ͷ࠷্ҐʹདྷΔΑ͏ͳ΋ͷʣΛ
 ςετ͢Δ৔߹ʹɺଞͷϞδϡʔϧͱͷ࿈ܞΛ֬ೝ͢Δ • ϝΠϯϩδοΫʹ͋ΔೖྗΛ༩͑ͨ৔߹ʹɺ
 ૝ఆ௨ΓʹαϒػೳΛݺͼग़ͯ͠
 ͍Δ͔Ͳ͏͔ʢMockͷݺͼग़͞ΕํΛݟΔʣ

    ϝΠϯ ϩδοΫ ֎෦"1* %#ΞΫηε ɾɾɾ ͜͜ͷ࿈ܞ͕૝ఆ௨Γʹͳ͍ͬͯΔ͔Ͳ͏͔
  24. Mock - Α͋͘Δ࢖ΘΕํ (2) ςετର৅ʢ͜͜Ͱ͸ػೳAʣࣗ਎΋ผͷ্Ґػೳ͔Βݺͼग़͞Εɺ
 ͳΜΒ͔ͷ໭Γ஋Λฦ͢ػೳͰ͋Δ৔߹ • ػೳAͷґଘઌ(sub) Λ
 ϞοΫ্ͨ͠Ͱ


    ೖྗʗग़ྗύλʔϯΛ
 assert ͢Δ ػೳ" ֎෦"1* %#ΞΫηε feature sub ɾɾɾ ϝΠϯ ϩδοΫ main ͜͜ͷڍಈΛνΣοΫͯ͠ ػೳ"Λݕূ͍ͨ͠ ഉআ͍ͨ͠ ֎෦Өڹ
  25. ࣄલ஌ࣝɿϋϯζΦϯͷલʹ

  26. Ϟδϡʔϧͷ࿩ πϦʔͷԼʹσΟϨΫτϦΛ੾ͬͯ __init__.py Λ഑ஔ͢ΔͱɺPython (ͷ importlib) ͸
 ͦͷσΟϨΫτϦΛʮϞδϡʔϧʯͱͯ͠ೝࣝ͢ΔΑ͏ʹͳΓ·͢ʢࢀߟʣɻ ιʔεπϦʔ͔Βࣗ࡞ιʔεΛ importʢ·ͨ͸

    from ~ importʣͰ͖ΔΑ͏ʹͳΓ·͢ɻ import Մೳ import ෆՄ >>> import my_module >>> from my_module import handler
  27. Α͋͘Διʔεߏ੒ Α͋͘Δͷ͸ࠨɻγϯϓϧͳ࡞ΓͳΒӈͷύλʔϯ΋͋Δ ϧʔτσΟϨΫτϦ͔Β ։ൃର৅ͱςετΛ෼཭ ֤ϞδϡʔϧͱಉҰ֊૚ʹ ։ൃର৅ͱςετΛಉډ

  28. sls ʹ͓͚Δ௥Ճύοέʔδͷόϯυϧ serverless-python-requirements Λ࢖͏ͷ͕ศརʢϫʔΫγϣοϓͷιʔεͰ΋࢖༻͍ͯ͠·͢ • requirements.txt ΍ Pipfile ͷ಺༰Λউखʹόϯυϧͯ͘͠ΕΔ •

    requirements.txt Λ࢖͍ͬͯΔ৔߹͸ಛʹ௥Ճઃఆෆཁ • ೚ҙ໊শͰ΋ରԠՄೳɻ #Customize requirements file name ͷηΫγϣϯΛࢀর • layer ͷ࡞੒΋Ͱ͖Δ (#Lambda Layer ηΫγϣϯΛࢀর) serverless.yml هड़ྫ (Pipenv)
  29. Tips / FAQ?

  30. Tips ςετର৅ͷʮ෭࡞༻(※)ʯΛߟྀ͢Δɻ෭࡞༻͸Ͱ͖Δ͚ͩݮΒ͢ or ہॴԽ͞Ε͍ͯΔ ํ͕ςετ͸͠΍͍͢ • ೖྗ͕ಉ͡ͳΒ݁Ռ΋ৗʹಉ͡ʹͳΔΑ͏ʹ͢Δɻڍಈ͕༧ଌ͠΍͍͢ʢႈ౳ੑʣ • ෳࡶͳ಺෦ঢ়ଶʹґଘ͢ΔίʔυϢχοτ͸Ͱ͖Δ͚ͩͳ͍ํ͕Α͍ •

    εςʔτϑϧͳػೳ͸શମͷҰ෦ʹԡ͠ࠐΉ • ֎෦Ϧιʔε΁ͷΞΫηε͸ผϞδϡʔϧʹ੾Γग़ͯ͠ɺ೚ͤΔ (※)… “ঢ়ଶ” ΛมԽͤ͞ɺͦͷޙͷॲཧ݁Ռʹ΋ӨڹΛ༩͑ΔԿΒ͔ͷॲཧΛࢦ͢ɻม਺΁ͷ୅ೖɺετϨʔδ΍DB΁ͷΞΫηεͳͲ
  31. Tips • ಺෦ঢ়ଶΛ࣋ͪɺڍಈ͕಺෦ঢ়ଶʹґଘ͢Δ • ʢඞવੑͷͳ͍ʣάϩʔόϧม਺΁ͷґଘ • ಛఆΫϥεͷϝϯόʔม਺΁ͷґଘ • ಉҰΫϥε಺ͷಠཱͨ͠ʢΑ͏ʹݟ͑ΔʣϝιουؒͰݺͼग़͠ॱংʹґଘؔ܎ •

    ֎෦ػೳͱͷ࿈ܞؚ͕·Ε͍ͯΔ • 3rd party ͷ API ͷݺͼग़͠ • DB ΞΫηεʗετϨʔδΞΫηε
  32. Tips ʮৄࡉʯΛܾΊଧͪ͢ΔίʔυΛॻ͘ͱɺςετΛॻ͘ͱ͖ʹۤ࿑͢Δ • ৄࡉͱ͸ʁ • σʔλϕʔεͷબఆ … RDB/Key-Value/ΠϯϝϞϦ ?? •

    ֎෦αʔϏεͱͷ௨৴ํ๏ͷৄࡉ … http/websocket/grpc/graphql ͳͲ • ϑΝΠϧΛอଘ͢ΔετϨʔδͷछྨʢϩʔΧϧ or S3?? σʔλϑΥʔϚο τͷ࢓༷͸? ͳͲʣ
  33. Tips ʮৄࡉʯΛܾΊଧͪ͢ΔίʔυΛॻ͘ͱɺςετΛॻ͘ͱ͖ʹۤ࿑͢Δ • ͜ΕΒΛʮϢʔεέʔεʯͱͳΔϝΠϯϩδοΫʹϕλॻ͖͢Δͱ… • ϝΠϯϩδοΫͷςετͰʮৄࡉʯཁૉͷ۩ମతͳ࢖͍ํ΋ܾΊଧͪ͢Δඞཁ͕ग़Δ • มߋʹରͯ͠؆୯ʹӨڹΛड͚ͯ͠·͏ɻςετͷ౔୆͕੬ऑʹͳΔ • Αͬͯʮৄࡉʯ͕ϝΠϯϩδοΫ͔Β௚઀ݟ͑ͳ͍Α͏ʹ͢Δ

    • ۩৅ͷهड़Ͱ͸ͳ͘ɺந৅తͳΠϯλϑΣʔεͱͯ͠੾Γग़͢ɻ͜͏͢ΔͱϝΠϯϩ δοΫͱͦͷςετ͕҆ఆ͠΍͍͢
  34. Tips • ϢʔεέʔεΛ੔ཧ͠ɺͦΕΛදݱ͢Δந৅తͳ໊લͷΠϯλϑΣʔεΛ੾Γग़͢ • ࣮૷ํ๏ͷৄࡉʢྫ͑͹SQLͷॻ͖ํͱ͔ʣΛӅṭ͢Δ͜ͱͰɺϢʔεέʔεࣗ ମͷϩδοΫ͸෦෼తͳৄࡉ࢓༷ͷมߋʹରͯ͠ӨڹΛड͚ͮΒ͘ͳΔ • ʮϕλॻ͖ʯ͢ΔΑΓ͸ɺػೳΛந৅తͳΠϯλϑΣʔεʹ੾Γग़ͯ͠ɺͦͷΠϯλ ϑΣʔεʹґଘͤ͞Δํ͕๬·͍͠ •

    Factory method / Abstract Factory ύλʔϯ • ґଘੑͷ஫ೖʢDependency Injectionʣ
  35. FAQ? ʮςετۦಈ։ൃ (TDD) ʯ͸ςετͷٕ๏Ͱ͸ͳ͍ • TDD͸։ൃͷख๏ • ઌʹϢχοτςετΛॻ͖࢝ΊΔ͜ͱͰɺઃܭ΁ͷϑΟʔυ όοΫΛਝ଎ʹɺ͔ͭܧଓతʹಘΔ͜ͱ͕Ϟνϕ

  36. FAQ? xxx-local γϦʔζͱ͔ɺlocalstackͬͯͲ͏ͳΜʁ • ʢݸਓతҙݟʣ૯ධͱͯ͠͸ɺςετ༻్ͱͯ͠ݟΔͳΒΠϚΠνɻͲ͏ͯ͠΋ඞཁͳཧ༝͕ग़ͨ ͱ͖ʹ͚ͩݕ౼͢΂͖ → YAGNI ͷݪଇɻʮૣ͗ͨ͢࠷దԽʯʹؕͬͯ͸͍͚ͳ͍ •

    localstack Λςετͷखஈͱͯ͠Ξςʹ͗͢͠Δͱ… • ςετ͸ຊ൪ίʔυͷҰ෦ͳͷͰɺߏ੒͕มΘͬͨΒ localstack ΋௥ਵ͢Δඞཁ͕͋Δ • localstack ͷҡ࣋؅ཧ͕อकίετʹͳͬͯ͠·͏ʢͦͯ͠ϝϯς͞Εͳ͍ෛ࠴ίʔυ΁ʣ
  37. FAQ? doctest ͬͯͲ͏ͳΜʁ • ຊ൪ίʔυʹॻ͔Εͨ”ಈ࡞͢Δ”࢓༷ॻͱͯ͠ɺҙٛ͸े෼͋Γͦ͏ʢಠཱͨ͠υΩϡϝϯτ͸์ ஔ͞Ε΍͍͢ͷͰɺίʔυϕʔεͱಉ͡৔ॴʹ͋ΔυΩϡϝϯτͰ͋Δ͜ͱʹՁ஋͕͋Δʣ • ͱ͸͍͑ɺΤσΟλͷิ׬΍ docstring ಺ͷ࣮ߦίϯςΩετͳͲҙࣝ͢Δඞཁ͕͋Γͦ͏ͩ͠ɺ

    ୯७ʹॻ͖ͮΒ͍ͷͰݱ࣌఺Ͱ͋Μ·ΓϙδςΟϒͳҹ৅͸ͳ͍
  38. FAQ? xxx-local γϦʔζͱ͔ɺlocalstackͬͯͲ͏ͳΜʁ • lambda-local • ݸਓతʹ͸͋Μ·Γ༗ޮͳ࢖్͍͕ͳ͍ҹ৅ • ϥϯλΠϜݻ༗ͷΤϥʔέʔε·Ͱݟ͍ͨͳΒΞϦʁ…Ͱ΋ͦΕ࣮ػͰ΍ͬʢུ

  39. FAQ? xxx-local γϦʔζͱ͔ɺlocalstackͬͯͲ͏ͳΜʁ • dynamodb-local • ख͔࣮ܰͭࡍʹΞΫηεͰ͖Δಈ࡞ݕূ؀ڥͱͯ͠͸ΞϦɻFunctional Test ʹ͸࢖͑Δ͔΋ʁ •

    ݸਓతʹ͸ΫΤϦܗࣜΛಈ࡞ݕূ͢Δͱ͖ʹ͋ͬͨΒ͍͍ఔ౓ɻσʔλͷग़͠ೖΕΛ൐͏ؔ਺ͷ ςετͰ͋Ε͹ɺී௨ʹMockͰ΋ࣄ଍ΓΔ • εΩʔϚมΘͬͯ΋ςετͷҰ؏ੑΛอ͍ͪͨͳΒ…ͨͩɺεΩʔϚมߋ͸DB૊Έ௚͔͠ʢLSI/ GSI௥ՃͷΈͰʣطଘΫΤϦʹӨڹͳͩ͠ͱࢥ͏ͷͰɺҡ࣋ͷखؒʹݟ߹͏ͱ͸ߟ͑ͯͳ͍
  40. FAQ? xxx-local γϦʔζͱ͔ɺlocalstackͬͯͲ͏ͳΜʁ • localstack • ※࢖ͬͨ͜ͱͳ͍ͷͰͳΜͱͳ͘ͷҹ৅Λճ౴͠·͢ • ϩʔΧϧͰͷݕূʢvalidateͰ͸ͳ͘ɺPoCతͳҙຯͷํʣʹ࢖͏΋ͷɺͱ͍͏ఔ౓ •

    ςετ͸ຊ൪ίʔυͷҰ෦ͳͷͰɺίʔυͷมߋʹ൐͍ localstack ΋ҡ࣋؅ཧ͕ඞཁʹͳΔɻ
 Ҿ͖ܧ͗ίετɾอकίετ্͕͕Δ͕ɺͦΕʹݟ߹͏΄ͲͷϝϦοτ͕͋·Γݟ͍ͩͤͳ͍ҹ৅
  41. ࢀߟ • ॻ੶ • Ϧʔμϒϧίʔυ ―ΑΓྑ͍ίʔυΛॻͨ͘ΊͷγϯϓϧͰ࣮ફతͳςΫχοΫ • ςετۦಈ։ൃ • ςετۦಈPython

  42. ࣮ફ

  43. ※ϋϯζΦϯηογϣϯ΁

  44. ࢀߟ

  45. ςετΛࢧԉ͢Δύοέʔδ (1/2) • tmpfile … Pythonඪ४ύοέʔδɻϑΝΠϧͷI/OΛςετ͢Δඞཁ͕͋Δ৔߹ʹɺςετதͷΈ࢖ ༻͢ΔҰ࣌తͳϑΝΠϧ/σΟϨΫτϦΛ࡞ΕΔ • nose …

    unittestΛ΋ͬͱศརʹ͢Δ΍ͭ • pytest … unittestΛ΋ͬͱศརʹ͢Δ΍ͭ • coverage … ΧόϨοδϨϙʔτͷੜ੒ (nose, pytest ͳͲʹϓϥάΠϯՄೳ) • tox … ෳ਺όʔδϣϯͷPythonͰςετΛ࣮ࢪ͢Δͱ͖ʹ࢖͏
  46. ςετΛࢧԉ͢Δύοέʔδ (2/2) • httpretty … ੜͷHTTPϦΫΤετΛϞοΫ͢Δʢ࣮૷ྫʣ • moto … boto3

    ༻ͷMockʢBatchWriterͳͲҰ෦ඇରԠ͋Γʣ • aws sam cli … Lambda ͷ event Ҿ਺ͷαϯϓϧೖྗΛखૣ͘ੜ੒͢Δͷʹ࢖͑Δ • serverless-dynamodb-local … Serverless ϓϥάΠϯɻDynamoDB ͷϩʔΧϧಈ࡞ݕূʹศར
  47. See Also • Python document: unittest —- ϢχοτςετϑϨʔϜϫʔΫ • ςετۦಈ։ൃ

    • CAREER SKILLSɹιϑτ΢ΣΞ։ൃऀͷ׬શΩϟϦΞΨΠυ • ୈ29ষ ςετۦಈ։ൃͱϢχοτςετ • ୈ32ষ σόοά