Slide 1

Slide 1 text

Unittest ͷೖ໳ #testability-exercise

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Unittest جຊ֓೦

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Why (1/3) ίʔυͷઃܭ͕վળ͞ΕΔʢ࠷ॏཁʣ • ࣗ෼͕࡞ͬͨʮϢχοτʯ͕؆୯ʹςετͰ͖ͳ͍৔߹͸ɺԿ͔ͷઃܭ͕Πέͯͳ͍αΠϯ͔΋ • e.g) ςετέʔεͷηοτΞοϓ͕೉ղɹˠɹඞཁҎ্ʹʮঢ়ଶʯΛ͔࣋ͪ͗͢΋ʁ • ͦͷϢχοτ͕ա৒ʹ੹຿Λ࣋ͪ͗ͨ͢ઃܭʹͳ͍ͬͯΔ͔΋͠Εͳ͍ͱΘ͔Δ • ࣗ෼ͷઃܭΛʢΑΓϝϯςφϒϧͳߏ଄ʹ͢ΔͨΊʹʣධՁ͢Δ࡞ۀɺͱ΋ݴ͑Δ • ςετͮ͠Β͍ຊ൪ίʔυΛ໧ೝͯ͠ແཧ͘Γద߹ͤͯ͞͠·͏ͱɺϢχοτςετͷࢫຯ͕ݮΔ

Slide 7

Slide 7 text

Why (2/3) Ҿ͖ܧ͗ޙͷ୲౰ऀ͕ιϑτ΢ΣΞͷ࢓༷Λཧղ͢ΔͨΊʹ໾ཱͭ • ։ൃͨ͠ίʔυ͕ຊ౰ʹՁ஋Λ΋ͨΒ͢ͷ͸։ൃ׬ྃ࣌఺Ͱ͸ͳ͘อकϑΣʔζͰ͋Δ • ίʔυ͸ɺॻ࣌ؒ͘ΑΓಡ·ΕΔ࣌ؒͷํ͕ଟ͍ • ෳࡶͰอकͮ͠Β͍ίʔυ͸ɺະདྷͷՁ஋ͷϙςϯγϟϧΛଛͳ͏ • ͦͷίʔυϢχοτΛͲͷΑ͏ʹ࢖͏΂͖͔ɺҙਤͨ͠࢓༷ɾ࢖͍ํΛਪ࡯Ͱ͖Δ • ※ͨͩ͠ɺdocstring ΍ͦͷଞͷυΩϡϝϯτʢશମߏ੒ʗઃܭࢥ૝ʗσϓϩΠαΠΫϧͷखॱͳͲʣ Λॆ࣮ͤ͞ΔͳͲɺଞʹ΋Ҿ͖ܧ͗ͷͨΊͷඞཁཁૉ͸͍͘ΒͰ΋͋Δ

Slide 8

Slide 8 text

Why (3/3) Ϣχοτςετ͕ࣗಈςετͷૅʹͳΔʢ෭࣍తͳϝϦοτʣ • ࣗಈςετΛऔΓೖΕΔ͜ͱͰػೳվमͷݕূ͕εϐʔσΟʹͳΔ
 ʹՁ஋ΛੜΈग़͢αΠΫϧΛΑΓૣ͘ճͤΔ • ※ࣗಈςετͷલఏͱͯ͠ɺҙຯͷ͋ΔˍࣗಈԽ͠΍͍͢Ϣχοτςετ͕ॻ͚͍ͯΔ͜ͱ͕ॏཁ ʹͳΔ • ※ຊདྷతʹ͸Ϣχοτςετ͚ͩͰͳ݁͘߹ςετ΋ߦͬͯɺϢʔεέʔεతʹҙຯΛཻ࣋ͭ౓ͷ ςετ΋͋ͬͨํ͕Α͍

Slide 9

Slide 9 text

How ʮ࣮૷͕ਖ਼͘͠ػೳ͍ͯ͠ΔͳΒ݁Ռ͸͜͏ͳΔ͸ͣʯΛݕূ • ಛఆ৚݅ʢҾ਺౳ʣΛ༩͑ͨ৔߹ͷ໭Γ஋Λݕূ • ςετର৅͕࢖༻͢Δ֎෦ػೳΛ૝ఆ௨Γݺͼग़ͤΔ͔Ͳ͏͔ • ૝ఆ௨ΓʹίέΔ͜ͱ΋ʮਖ਼͠͞ʯͷݕূʹͳΔ

Slide 10

Slide 10 text

How ਖ਼ৗܥͷςετ

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

How ҟৗܥͷςετ • int Ҏ֎ͷ৔߹͸
 ValueError ྫ֎Λ্͛Δ
 ࢓༷Λ௥Ճ ੔਺ܕҎ֎ͷέʔεʢ͜͜Ͱ͸จࣈྻܕʣΛ ਖ਼ৗʹ஄ͨ͘ΊͷόϦσʔγϣϯΛ௥Ճ BEE ʹจࣈྻΛೖྗ͢Δͱ 7BMVF&SSPSͰ ஄͔ΕΔ͜ͱΛݕূ

Slide 14

Slide 14 text

How ผػೳͱͷ࿈ܞ͕͋Δؔ਺ͷ
 Ϣχοτςετ • ࿈ܞ͢ΔػೳΛμϛʔʹ
 ࠩ͠ସ͑Δ (mock) ࣮ྫ͸͜ͷޙͷ ϋϯζΦϯηογϣϯͷ෦Ͱ

Slide 15

Slide 15 text

Mock ͱ͸ … ʁʁʁʁʁ

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Mock ผػೳͱͷ࿈ܞ͕͋Δؔ਺ͷ
 Ϣχοτςετ • ࿈ܞ͢ΔػೳΛμϛʔʹ
 ࠩ͠ସ͑Δ (mock) ϝΠϯϩδοΫ ֎෦"1* NPDL %#ΞΫηε NPDL ɾɾɾ NPDLͨ͠ػೳΛʮͲ͏࢖ͬͨͷ͔ʯ؍఺ ˞ݺͼग़͠ͷҾ਺΍ɺͦͷճ਺ͳͲ

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

Mock - Α͋͘Δ࢖ΘΕํ (2) ςετର৅ʢ͜͜Ͱ͸ػೳAʣࣗ਎΋ผͷ্Ґػೳ͔Βݺͼग़͞Εɺ
 ͳΜΒ͔ͷ໭Γ஋Λฦ͢ػೳͰ͋Δ৔߹ • ػೳAͷґଘઌ(sub) Λ
 ϞοΫ্ͨ͠Ͱ
 ೖྗʗग़ྗύλʔϯΛ
 assert ͢Δ ػೳ" ֎෦"1* %#ΞΫηε feature sub ɾɾɾ ϝΠϯ ϩδοΫ main ͜͜ͷڍಈΛνΣοΫͯ͠ ػೳ"Λݕূ͍ͨ͠ ഉআ͍ͨ͠ ֎෦Өڹ

Slide 25

Slide 25 text

ࣄલ஌ࣝɿϋϯζΦϯͷલʹ

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

Α͋͘Διʔεߏ੒ Α͋͘Δͷ͸ࠨɻγϯϓϧͳ࡞ΓͳΒӈͷύλʔϯ΋͋Δ ϧʔτσΟϨΫτϦ͔Β ։ൃର৅ͱςετΛ෼཭ ֤ϞδϡʔϧͱಉҰ֊૚ʹ ։ൃର৅ͱςετΛಉډ

Slide 28

Slide 28 text

sls ʹ͓͚Δ௥Ճύοέʔδͷόϯυϧ serverless-python-requirements Λ࢖͏ͷ͕ศརʢϫʔΫγϣοϓͷιʔεͰ΋࢖༻͍ͯ͠·͢ • requirements.txt ΍ Pipfile ͷ಺༰Λউखʹόϯυϧͯ͘͠ΕΔ • requirements.txt Λ࢖͍ͬͯΔ৔߹͸ಛʹ௥Ճઃఆෆཁ • ೚ҙ໊শͰ΋ରԠՄೳɻ #Customize requirements file name ͷηΫγϣϯΛࢀর • layer ͷ࡞੒΋Ͱ͖Δ (#Lambda Layer ηΫγϣϯΛࢀর) serverless.yml هड़ྫ (Pipenv)

Slide 29

Slide 29 text

Tips / FAQ?

Slide 30

Slide 30 text

Tips ςετର৅ͷʮ෭࡞༻(※)ʯΛߟྀ͢Δɻ෭࡞༻͸Ͱ͖Δ͚ͩݮΒ͢ or ہॴԽ͞Ε͍ͯΔ ํ͕ςετ͸͠΍͍͢ • ೖྗ͕ಉ͡ͳΒ݁Ռ΋ৗʹಉ͡ʹͳΔΑ͏ʹ͢Δɻڍಈ͕༧ଌ͠΍͍͢ʢႈ౳ੑʣ • ෳࡶͳ಺෦ঢ়ଶʹґଘ͢ΔίʔυϢχοτ͸Ͱ͖Δ͚ͩͳ͍ํ͕Α͍ • εςʔτϑϧͳػೳ͸શମͷҰ෦ʹԡ͠ࠐΉ • ֎෦Ϧιʔε΁ͷΞΫηε͸ผϞδϡʔϧʹ੾Γग़ͯ͠ɺ೚ͤΔ (※)… “ঢ়ଶ” ΛมԽͤ͞ɺͦͷޙͷॲཧ݁Ռʹ΋ӨڹΛ༩͑ΔԿΒ͔ͷॲཧΛࢦ͢ɻม਺΁ͷ୅ೖɺετϨʔδ΍DB΁ͷΞΫηεͳͲ

Slide 31

Slide 31 text

Tips • ಺෦ঢ়ଶΛ࣋ͪɺڍಈ͕಺෦ঢ়ଶʹґଘ͢Δ • ʢඞવੑͷͳ͍ʣάϩʔόϧม਺΁ͷґଘ • ಛఆΫϥεͷϝϯόʔม਺΁ͷґଘ • ಉҰΫϥε಺ͷಠཱͨ͠ʢΑ͏ʹݟ͑ΔʣϝιουؒͰݺͼग़͠ॱংʹґଘؔ܎ • ֎෦ػೳͱͷ࿈ܞؚ͕·Ε͍ͯΔ • 3rd party ͷ API ͷݺͼग़͠ • DB ΞΫηεʗετϨʔδΞΫηε

Slide 32

Slide 32 text

Tips ʮৄࡉʯΛܾΊଧͪ͢ΔίʔυΛॻ͘ͱɺςετΛॻ͘ͱ͖ʹۤ࿑͢Δ • ৄࡉͱ͸ʁ • σʔλϕʔεͷબఆ … RDB/Key-Value/ΠϯϝϞϦ ?? • ֎෦αʔϏεͱͷ௨৴ํ๏ͷৄࡉ … http/websocket/grpc/graphql ͳͲ • ϑΝΠϧΛอଘ͢ΔετϨʔδͷछྨʢϩʔΧϧ or S3?? σʔλϑΥʔϚο τͷ࢓༷͸? ͳͲʣ

Slide 33

Slide 33 text

Tips ʮৄࡉʯΛܾΊଧͪ͢ΔίʔυΛॻ͘ͱɺςετΛॻ͘ͱ͖ʹۤ࿑͢Δ • ͜ΕΒΛʮϢʔεέʔεʯͱͳΔϝΠϯϩδοΫʹϕλॻ͖͢Δͱ… • ϝΠϯϩδοΫͷςετͰʮৄࡉʯཁૉͷ۩ମతͳ࢖͍ํ΋ܾΊଧͪ͢Δඞཁ͕ग़Δ • มߋʹରͯ͠؆୯ʹӨڹΛड͚ͯ͠·͏ɻςετͷ౔୆͕੬ऑʹͳΔ • Αͬͯʮৄࡉʯ͕ϝΠϯϩδοΫ͔Β௚઀ݟ͑ͳ͍Α͏ʹ͢Δ • ۩৅ͷهड़Ͱ͸ͳ͘ɺந৅తͳΠϯλϑΣʔεͱͯ͠੾Γग़͢ɻ͜͏͢ΔͱϝΠϯϩ δοΫͱͦͷςετ͕҆ఆ͠΍͍͢

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

FAQ? ʮςετۦಈ։ൃ (TDD) ʯ͸ςετͷٕ๏Ͱ͸ͳ͍ • TDD͸։ൃͷख๏ • ઌʹϢχοτςετΛॻ͖࢝ΊΔ͜ͱͰɺઃܭ΁ͷϑΟʔυ όοΫΛਝ଎ʹɺ͔ͭܧଓతʹಘΔ͜ͱ͕Ϟνϕ

Slide 36

Slide 36 text

FAQ? xxx-local γϦʔζͱ͔ɺlocalstackͬͯͲ͏ͳΜʁ • ʢݸਓతҙݟʣ૯ධͱͯ͠͸ɺςετ༻్ͱͯ͠ݟΔͳΒΠϚΠνɻͲ͏ͯ͠΋ඞཁͳཧ༝͕ग़ͨ ͱ͖ʹ͚ͩݕ౼͢΂͖ → YAGNI ͷݪଇɻʮૣ͗ͨ͢࠷దԽʯʹؕͬͯ͸͍͚ͳ͍ • localstack Λςετͷखஈͱͯ͠Ξςʹ͗͢͠Δͱ… • ςετ͸ຊ൪ίʔυͷҰ෦ͳͷͰɺߏ੒͕มΘͬͨΒ localstack ΋௥ਵ͢Δඞཁ͕͋Δ • localstack ͷҡ࣋؅ཧ͕อकίετʹͳͬͯ͠·͏ʢͦͯ͠ϝϯς͞Εͳ͍ෛ࠴ίʔυ΁ʣ

Slide 37

Slide 37 text

FAQ? doctest ͬͯͲ͏ͳΜʁ • ຊ൪ίʔυʹॻ͔Εͨ”ಈ࡞͢Δ”࢓༷ॻͱͯ͠ɺҙٛ͸े෼͋Γͦ͏ʢಠཱͨ͠υΩϡϝϯτ͸์ ஔ͞Ε΍͍͢ͷͰɺίʔυϕʔεͱಉ͡৔ॴʹ͋ΔυΩϡϝϯτͰ͋Δ͜ͱʹՁ஋͕͋Δʣ • ͱ͸͍͑ɺΤσΟλͷิ׬΍ docstring ಺ͷ࣮ߦίϯςΩετͳͲҙࣝ͢Δඞཁ͕͋Γͦ͏ͩ͠ɺ ୯७ʹॻ͖ͮΒ͍ͷͰݱ࣌఺Ͱ͋Μ·ΓϙδςΟϒͳҹ৅͸ͳ͍

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

FAQ? xxx-local γϦʔζͱ͔ɺlocalstackͬͯͲ͏ͳΜʁ • dynamodb-local • ख͔࣮ܰͭࡍʹΞΫηεͰ͖Δಈ࡞ݕূ؀ڥͱͯ͠͸ΞϦɻFunctional Test ʹ͸࢖͑Δ͔΋ʁ • ݸਓతʹ͸ΫΤϦܗࣜΛಈ࡞ݕূ͢Δͱ͖ʹ͋ͬͨΒ͍͍ఔ౓ɻσʔλͷग़͠ೖΕΛ൐͏ؔ਺ͷ ςετͰ͋Ε͹ɺී௨ʹMockͰ΋ࣄ଍ΓΔ • εΩʔϚมΘͬͯ΋ςετͷҰ؏ੑΛอ͍ͪͨͳΒ…ͨͩɺεΩʔϚมߋ͸DB૊Έ௚͔͠ʢLSI/ GSI௥ՃͷΈͰʣطଘΫΤϦʹӨڹͳͩ͠ͱࢥ͏ͷͰɺҡ࣋ͷखؒʹݟ߹͏ͱ͸ߟ͑ͯͳ͍

Slide 40

Slide 40 text

FAQ? xxx-local γϦʔζͱ͔ɺlocalstackͬͯͲ͏ͳΜʁ • localstack • ※࢖ͬͨ͜ͱͳ͍ͷͰͳΜͱͳ͘ͷҹ৅Λճ౴͠·͢ • ϩʔΧϧͰͷݕূʢvalidateͰ͸ͳ͘ɺPoCతͳҙຯͷํʣʹ࢖͏΋ͷɺͱ͍͏ఔ౓ • ςετ͸ຊ൪ίʔυͷҰ෦ͳͷͰɺίʔυͷมߋʹ൐͍ localstack ΋ҡ࣋؅ཧ͕ඞཁʹͳΔɻ
 Ҿ͖ܧ͗ίετɾอकίετ্͕͕Δ͕ɺͦΕʹݟ߹͏΄ͲͷϝϦοτ͕͋·Γݟ͍ͩͤͳ͍ҹ৅

Slide 41

Slide 41 text

ࢀߟ • ॻ੶ • Ϧʔμϒϧίʔυ ―ΑΓྑ͍ίʔυΛॻͨ͘ΊͷγϯϓϧͰ࣮ફతͳςΫχοΫ • ςετۦಈ։ൃ • ςετۦಈPython

Slide 42

Slide 42 text

࣮ફ

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

ࢀߟ

Slide 45

Slide 45 text

ςετΛࢧԉ͢Δύοέʔδ (1/2) • tmpfile … Pythonඪ४ύοέʔδɻϑΝΠϧͷI/OΛςετ͢Δඞཁ͕͋Δ৔߹ʹɺςετதͷΈ࢖ ༻͢ΔҰ࣌తͳϑΝΠϧ/σΟϨΫτϦΛ࡞ΕΔ • nose … unittestΛ΋ͬͱศརʹ͢Δ΍ͭ • pytest … unittestΛ΋ͬͱศརʹ͢Δ΍ͭ • coverage … ΧόϨοδϨϙʔτͷੜ੒ (nose, pytest ͳͲʹϓϥάΠϯՄೳ) • tox … ෳ਺όʔδϣϯͷPythonͰςετΛ࣮ࢪ͢Δͱ͖ʹ࢖͏

Slide 46

Slide 46 text

ςετΛࢧԉ͢Δύοέʔδ (2/2) • httpretty … ੜͷHTTPϦΫΤετΛϞοΫ͢Δʢ࣮૷ྫʣ • moto … boto3 ༻ͷMockʢBatchWriterͳͲҰ෦ඇରԠ͋Γʣ • aws sam cli … Lambda ͷ event Ҿ਺ͷαϯϓϧೖྗΛखૣ͘ੜ੒͢Δͷʹ࢖͑Δ • serverless-dynamodb-local … Serverless ϓϥάΠϯɻDynamoDB ͷϩʔΧϧಈ࡞ݕূʹศར

Slide 47

Slide 47 text

See Also • Python document: unittest —- ϢχοτςετϑϨʔϜϫʔΫ • ςετۦಈ։ൃ • CAREER SKILLSɹιϑτ΢ΣΞ։ൃऀͷ׬શΩϟϦΞΨΠυ • ୈ29ষ ςετۦಈ։ൃͱϢχοτςετ • ୈ32ষ σόοά