Slide 1

Slide 1 text

+6OJUͷ֦ுػೳΛ ׬શʹϚελʔͨ͌͠ 5 ؔδϟό݄౓!JSPG #PU8͸%ਲ͍Ͱ·ͩΫϦΞͰ͖ͯͳ͍ɻ

Slide 2

Slide 2 text

͓඼ॻ͖ ࠷ۙͷ+6OJU &YUFOTJPOͷ۩ମྫ &YUFOTJPOͷԼࢧ͑ &YUFOTJPOͷ࡞Γํ

Slide 3

Slide 3 text

͝஫ҙ +6OJU ਤ͸*OUFSOBM΍&YQFSJNFOUBMͳ ͲΛؚΈ·͢ɻ

Slide 4

Slide 4 text

࠷ۙͷ+6OJU ϦϦʔε௚ޙͷػೳෆ଍ظ͸ൈ͚ɺ ػೳతʹ͸མͪண͍͖ͯͨɻ

Slide 5

Slide 5 text

όʔδϣϯΛோΊΔ w ฒྻ࣮ߦ w ඪ४ग़ྗͷΩϟϓνϟ w ಈతςετ w !5FNQ%JS w 5FTU8BUDIFS w ج൫։ൃऀ޲͚"1*ॆ࣮ w !5JNFPVU w ֦ுϙΠϯτͭ w NPEVMFରԠ ϚΠΫϩόʔδϣϯ͸όάϑΟοΫεɻ

Slide 6

Slide 6 text

Ϟδϡʔϧؔ࿈ w WJOUBHFͱMBVODIFSपΓ͸লུɻίʔυॻ͘ͱ͖ʹग़ͯ͘Δ΋ͷ͚ͩɻ w ·Ͱ͸6TFS(VJEFʹ͜ͷਤ͋ͬͨΜ͚ͩͲɺ͔Βফ͑ͨɻͳ͔ͥ͸஌Βͳ͍ɻ

Slide 7

Slide 7 text

+6OJU͸࣮༻ʹ଱͑Δ͔ ·ͬͨ͘໰୊ͳ͍ɻ

Slide 8

Slide 8 text

&YUFOTJPOͷ۩ମྫ ͍͔ͭ͘঺հ͠·͢ɻ Կ͕Ͱ͖Δ͔งғؾ͕Θ͔Ε͹͍͍ͳͱɻ

Slide 9

Slide 9 text

&YUFOTJPO +6OJU+VQJUFSͷ֦ு 3VOOFS3VMFͷޙܧ +6OJU1MBUGPSNͷ֦ுͰ͸ͳ͍

Slide 10

Slide 10 text

ຊՈ੡ w &YUFOTJPOͷొ࿥ෆཁɻউखʹಈ͘ɻʢޙͰग़ͯ͘Δ%&'"6-5@&95&/4*0/4ʣ

Slide 11

Slide 11 text

+6OJUඪ४ͷ֦ு Ұ෦ 5JNFPVU&YUFOTJPO 5FNQ%JSFDUPSZ FYQU %JTBCMFE$POEJUJPO 1BSBNFUFSJ[FE5FTU&YUFOTJPO 5FTU*OGP1BSBNFUFS3FTPMWFS

Slide 12

Slide 12 text

5JNFPVU&YUFOTJPO @Timeout(value = 3, unit = TimeUnit.MILLISECONDS) public class SampleTimeout { @Test void test() throws Exception { TimeUnit.MILLISECONDS.sleep(5); } } w λΠϜΞ΢τʢ໓ଟʹ࢖Θͳ͍ʣ

Slide 13

Slide 13 text

5FNQ%JSFDUPSZ public class SampleTempDir { @TempDir Path tempDirPath; @Test void test() { System.out.println(tempDirPath); } } w !5FNQ%JSͳϑΟʔϧυ΍ύϥϝʔλ͕͋ͬͨΒ04ͷUFNQEJSʹσΟϨΫτϦΛ࡞ͬͯ 1BUIΛηοτͯ͘͠ΕΔɻ w KVOJUQJPOFFSʹ͋ͬͨͷ͕ຊՈʹऔΓࠐ·Εͨɻʢ·ͩ&91&3*.&/5"-͚ͩͲʣ

Slide 14

Slide 14 text

αʔυύʔςΟ੡ w ཁ&YUFOTJPOͷొ࿥ɻ

Slide 15

Slide 15 text

4QSJOH&YUFOTJPO // Spring @ExtendWith(SpringExtension.class) public class SampleSpringTest { // Spring Boot @SpringBootTest public class SampleSpringBootTest { w 4QSJOH࢖͏ͳΒɻ w 4QSJOH#PPU5FTU͸ϝλΞϊςʔγϣϯͷྫʹ΋ͳΔɻ

Slide 16

Slide 16 text

4QSJOH#PPU5FTU w 4QSJOHϢʔβʔͳΒ׳ΕͯΔʢʁʣϝλΞϊςʔγϣϯɻ w +6OJUͩͱ4QSJOH#PPU5FTUͱ3VO8JUIΛซه͢Δඞཁ͕͋ͬͨɻ

Slide 17

Slide 17 text

w .PDLJUP+6OJU3VOOFSͷ୅ସɻ w NPDLJUPDPSFʹೖ͍ͬͯͳ͍ NPDLJUPNPDLJUPKVOJUKVQJUFS ͷͰ஫ҙɻ .PDLJUP&YUFOTJPO

Slide 18

Slide 18 text

+6OJU+VQJUFS#%%4PGU"TTFSUJPOT w "TTFSU+ͷ֦ுɻ w "GUFS&BDI$BMMCBDLͰ࣮ݱ͍ͯ͠Δɻ

Slide 19

Slide 19 text

&YUFOTJPOͷԼࢧ͑ ͬ͘͟Γɺ͔ΜͨΜʹɻ

Slide 20

Slide 20 text

&YUFOTJPOͷಈ͔͠ํ

Slide 21

Slide 21 text

&YUFOTJPOͷొ࿥ !&YUFOE8JUI !3FHJTUFS&YUFOTJPO 4FSWJDF-PBEFS

Slide 22

Slide 22 text

&YUFOTJPOͷొ࿥

Slide 23

Slide 23 text

ొ࿥ࡁΈ&YUFOTJPO w ͜Ε͕͋Δ͔Βඪ४ͷ֦ு͕&YUFOE8JUIͱ͔ͳ͠Ͱಈ͘

Slide 24

Slide 24 text

&YUFOTJPO͸$POUFYUʹཷΊΔ

Slide 25

Slide 25 text

&OHJOF&YFDVUJPO$POUFYU w &OHJOF&YFDVUJPO$POUFYU͸ۭͬΆɻ w +VQJUFSͰͳ͍+6OJU1MBUGPSN͸&YUFOTJPOͳΜͯ஌ͬͨͬͪ͜Όͳ͍ɻ

Slide 26

Slide 26 text

&YUFOTJPO$POUFYU &YUFOTJPOͷ࣮૷ΫϥεͰ࢖͏ ʢ͜ͱ͕ଟ͍ʣ ౉ͬͯ͘Δ͔͸֦ுґଘ ʢ&YUFOTJPOΠϯλϑΣʔε͸ ϝιου࣋ͨͳ͍ʣ

Slide 27

Slide 27 text

&YUFOTJPO$POUFYUͷड͚औΓ w ΠϯλϑΣʔεͷҾ਺Ͱ౉͞ΕΔɻ w &YUFOTJPO$POUFYU͔ΒςετΠϯελϯεͳͲΛऔಘͯ͠৭ʑ͢Δɻ

Slide 28

Slide 28 text

֦ுϙΠϯτ ֦ுϙΠϯτ͝ͱʹΠϯλ ϑΣʔε͕༻ҙ͞Ε͍ͯΔɻ ݺͼग़͠͸+6OJU೚ͤɻ ৽͍֦͠ுϙΠϯτΛ଍͢ͷ ͸೉͍͠ɻ

Slide 29

Slide 29 text

&YUFOTJPO)JFSBSDIZ w ߇͑Ίʹݴͬͯ໾ʹཱͨͳ͍ਤɻ

Slide 30

Slide 30 text

෼͚ΔͳΒ͜͏ʁ

Slide 31

Slide 31 text

$BMMCBDL͕ݺ͹ΕΔλΠϛϯά w 6TFS(VJEFࢀর

Slide 32

Slide 32 text

ྫΛڍ͛ͯΈΔ

Slide 33

Slide 33 text

%JTBCMFE$POEJUJPO

Slide 34

Slide 34 text

4QSJOH&YUFOTJPO 5FTU&YFDVUJPO-JTUFOFSʹͭͳ͙࢓૊ Έ1BSBNFUFSղܾɻ ػೳ௥Ճ͸5FTU&YFDVUJPO-JTUFOFSͰɻ 5FTU$POUFYUҾͬுΓग़͠͸৻ॏʹɻ

Slide 35

Slide 35 text

࣮ࡍΑ͘࢖͏΋ͷ

Slide 36

Slide 36 text

&YUFOTJPOͷ࡞Γํ ؆୯ʹɻ

Slide 37

Slide 37 text

࡞Γํ ֦ுΠϯλϑΣʔ εΛૉ௚ʹ࢖͏ɻ ෺଍Γͳ͍ਓ͸ FOHJOF࣮૷͢Ε͹ ͍͍ʢී௨͠ͳ͍

Slide 38

Slide 38 text

΍Δ͜ͱ ࣮૷ΫϥεΛ࡞੒ &YUFOE8JUIͳͲͰొ࿥ w ؆୯Ͱ͠ΐʁ

Slide 39

Slide 39 text

࡞ͬͯΈΑ͏ ͳʹ͕͋ͬͯ΋ςετ͸௨ͬ ͯཉ͍͠ʂ

Slide 40

Slide 40 text

௨ͬͯཉ͍͠ςετ class MahouTest { @Test void ઈରࣦഊ͢Δ൵͍͠ςετ() { throw new RuntimeException(); } }

Slide 41

Slide 41 text

֦ுର৅ͷબ୒

Slide 42

Slide 42 text

֦ுର৅ͷબ୒

Slide 43

Slide 43 text

ྫ֎ϋϯυϥΛ࣮૷ class MahouExtension implements TestExecutionExceptionHandler { @Override public void handleTestExecutionException( ExtensionContext context, Throwable throwable) { } } w Կ΋͠ͳ͖ΌѲΓͭͿ͢͜ͱʹͳΔɻ

Slide 44

Slide 44 text

&YUFOE8JUIͰొ࿥ @ExtendWith(MahouExtension.class) class MahouTest { @Test void ઈରࣦഊ͢Δ൵͍͠ςετ() { throw new RuntimeException(); } }

Slide 45

Slide 45 text

΍ͬͨʔ

Slide 46

Slide 46 text

׬શʹϚελʔͨ͠ w ͪͳΈʹ00.&͸#MBDL-JTUFEFYDFQUJPOͱͯ͠ಛผѻ͍͞ΕͯΔ͔Βμϝɻ

Slide 47

Slide 47 text

୤ઢ#MBDLMJTUFE&YDFQUJPOT w 0VU0G.FNPSZ&SSPS͚ͩ͸ଈ࣌ऴྃ͢Δɻʢ+6OJU1MBUGPSNʣ

Slide 48

Slide 48 text

࡞ͬͯΈΑ͏ ॓୊ ςετʹಠࣗΞϊςʔγϣϯ Λ࢖ͬͨ΋ͷɻ ʢώϯτ͸࣍ͷϖʔδʣ

Slide 49

Slide 49 text

w TVQQPSUύοέʔδΛ࢖͏ͷ͕ਪ঑ʢ৑௕ʹͳͬͪΌ͏͠ʣ w 4VQQPSUFE6UJMJUJFTJO&YUFOTJPOT

Slide 50

Slide 50 text

֦ுͷՖܗ͸ 1BSBNFUFS3FTPMWFS ͩͱࢥ͏ w ͜͜ʹه͢ʹ͸༨ന͕ڱ͗͢ΔɻʢׂѪʣ

Slide 51

Slide 51 text

࡞Δͱ͖ͷϙΠϯτ ঢ়ଶ͸4UPSFͰѻ͏ ϝλΞϊςʔγϣϯΛ࡞Δ ҆શ૷ஔʹ߄ͯͳ͍

Slide 52

Slide 52 text

w ,FFQJOH4UBUFJO&YUFOTJPOT &YUFOTJPO4UPSF &YUFOTJPOʹঢ়ଶΛ࣋ͭͱ൵͍͜͠ ͱ͕ى͜Δɻ໘౗Ͱ΋4UPSFͰɻ ࢖͍ํ͸ೋஈ֊ͷ.BQɻ .BQ/BNFTQBDF .BQ, 7 ͷΠϝʔδɻ͋͘·ͰΠϝʔδɻ

Slide 53

Slide 53 text

4UPSFͱ/BNFTQBDFͱ1BSFOUͱ w &YUFOTJPO7BMVF4UPSFΠϯελϯεͷϥΠϑαΠΫϧ͸&YUFOTJPO$POUFYUͱಉ͡ w 4UPSFΠϯελϯε͸HFU4UPSFͷͨͼʹ࡞ΒΕΔʢ͚ͲͲ͏Ͱ΋͍͍ʣ w /BNFTQBDF࢖͍ʹ͍͘

Slide 54

Slide 54 text

ϝλΞϊςʔγϣϯ Ξϊςʔγϣϯʹ෇༩͢ΔΞϊςʔγϣϯ Ξϊςʔγϣϯͷهड़͸৑௕ͳͷͰੵۃతʹ࢖ ͏ &YUFOTJPO࡞ͬͨΒ&YUFOE8JUIͰΞϊςʔτ͠ ͨΞϊςʔγϣϯΛͱΓ͋͑ͣ࡞Δͱ͍͍ɻ +BWBඪ४ͷ࢓૊ΈͰ͸ͳ͍ w .FUB"OOPUBUJPOTBOE$PNQPTFE"OOPUBUJPOT

Slide 55

Slide 55 text

҆શ૷ஔ͍ͭͯ·͢ w 5FTU*OTUBODF'BDUPSZͰOVMMΛฦͨ͠ w *OWPDBUJPO*OUFSDFQUPSͰϝιουݺ͹ͳ͔ͬͨ w มͳ͜ͱ͕Ͱ͖ͳ͘ͳͬͯΔɻͨͱ͑͹ςετϝιουΛݺ͹ͳ͘͢Δͱ͔ɻ

Slide 56

Slide 56 text

͜ΕͰ+6OJUΛ ׬શʹϚελʔͨ͠ ʜʜͱݴ͍͍ͬͯͱࢥ͏ɻ ςετࣗମ͸10+0ͩ͠ɺΞαʔγϣϯํ๏͸બ୒ࣜɻ FOHJOF΍MBVODIFS͸+6OJU +VQJUFS Ͱ͸ͳ͘ɺ +6OJU1MBUGPSNͷ࿩ͳͷͰɻ