Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JUnit 5の拡張機能を完全にマスターした
Search
irof
September 19, 2019
Technology
1
2.4k
JUnit 5の拡張機能を完全にマスターした
2019-09-19T19:00 関ジャバ'19 9月度のセッション資料です。
https://kanjava.connpass.com/event/141792/
irof
September 19, 2019
Tweet
Share
More Decks by irof
See All by irof
プールにゆこう
irof
2
150
Javaマルチバージョンビルディング
irof
1
270
データ/データベースパターン
irof
0
120
勉強会で話すハードルを下げてみる
irof
0
22
Gatlingによる負荷テスト入門
irof
7
2k
これからのJavaのとっかかりを掴む
irof
0
8k
Listかもしれない
irof
2
470
ドメインモデルのつくり方
irof
2
470
ふつうのプログラマのふつうの設計
irof
16
18k
Other Decks in Technology
See All in Technology
使われないものを作るな!出口から作るデータ分析基盤 / Data Platform Development Starting from the User Needs
amaotone
16
4.9k
20240509 CloudWatch でいろいろなものを監視してみよう
masaruogura
1
120
[2024년 5월 세미나] 생성형 AI와 함께하는 데이터 분석가 커리어
datarian
0
1.3k
「できる!」を増やすGitHub Copilot活用法 / How to use GitHub Copilot to expand your possibilities
sansan_randd
1
250
#phpconkagawa レガシーコードにもオブザーバビリティを 〜少しずつ始めるサービス監視〜
yamato_sorariku
0
570
Google Cloudを組織(企業)で運用する時のベストプラクティス × 健康の環境分離戦略 #まるクラ勉強会
yasumuusan
0
190
試作とデモンストレーション / Prototyping and Demonstrations
ks91
PRO
0
180
TailwindCSSでUIライブラリを作る際のハマりどころ
shuta13
0
230
ハードウェアを動かすTypeScriptの世界
9wick
3
1.2k
1Q86
kawaguti
PRO
2
190
データベース04: SQL (1/3) 単純質問 & 集約演算
trycycle
0
180
【リラン】AIの光と闇?失敗しないために知っておきたいAIリスクとその対応 ①政府の動き編
tkhresk
0
140
Featured
See All Featured
Designing with Data
zakiwarfel
96
4.8k
Robots, Beer and Maslow
schacon
PRO
155
8k
Embracing the Ebb and Flow
colly
80
4.2k
Practical Orchestrator
shlominoach
183
9.8k
Writing Fast Ruby
sferik
622
60k
Thoughts on Productivity
jonyablonski
60
3.9k
Producing Creativity
orderedlist
PRO
338
39k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
8
3.5k
Typedesign – Prime Four
hannesfritz
36
2.1k
Building Adaptive Systems
keathley
32
1.9k
Gamification - CAS2011
davidbonilla
77
4.6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
21
2k
Transcript
+6OJUͷ֦ுػೳΛ શʹϚελʔͨ͌͠ 5 ؔδϟό݄!JSPG #PU8%ਲ͍Ͱ·ͩΫϦΞͰ͖ͯͳ͍ɻ
͓ॻ͖ ࠷ۙͷ+6OJU &YUFOTJPOͷ۩ମྫ &YUFOTJPOͷԼࢧ͑ &YUFOTJPOͷ࡞Γํ
͝ҙ +6OJU ਤ*OUFSOBM&YQFSJNFOUBMͳ ͲΛؚΈ·͢ɻ
࠷ۙͷ+6OJU ϦϦʔεޙͷػೳෆظൈ͚ɺ ػೳతʹམͪண͍͖ͯͨɻ
όʔδϣϯΛோΊΔ w ฒྻ࣮ߦ w ඪ४ग़ྗͷΩϟϓνϟ w
ಈతςετ w !5FNQ%JS w 5FTU8BUDIFS w ج൫։ൃऀ͚"1*ॆ࣮ w !5JNFPVU w ֦ுϙΠϯτͭ w NPEVMFରԠ ϚΠΫϩόʔδϣϯόάϑΟοΫεɻ
Ϟδϡʔϧؔ࿈ w WJOUBHFͱMBVODIFSपΓলུɻίʔυॻ͘ͱ͖ʹग़ͯ͘Δͷ͚ͩɻ w ·Ͱ6TFS(VJEFʹ͜ͷਤ͋ͬͨΜ͚ͩͲɺ͔Βফ͑ͨɻͳ͔ͥΒͳ͍ɻ
+6OJU࣮༻ʹ͑Δ͔ ·ͬͨ͘ͳ͍ɻ
&YUFOTJPOͷ۩ମྫ ͍͔ͭ͘հ͠·͢ɻ Կ͕Ͱ͖Δ͔งғؾ͕Θ͔Ε͍͍ͳͱɻ
&YUFOTJPO +6OJU+VQJUFSͷ֦ு 3VOOFS3VMFͷޙܧ +6OJU1MBUGPSNͷ֦ுͰͳ͍
ຊՈ w &YUFOTJPOͷొෆཁɻউखʹಈ͘ɻʢޙͰग़ͯ͘Δ%&'"6-5@&95&/4*0/4ʣ
+6OJUඪ४ͷ֦ு Ұ෦ 5JNFPVU&YUFOTJPO 5FNQ%JSFDUPSZ FYQU %JTBCMFE$POEJUJPO 1BSBNFUFSJ[FE5FTU&YUFOTJPO
5FTU*OGP1BSBNFUFS3FTPMWFS
5JNFPVU&YUFOTJPO @Timeout(value = 3, unit = TimeUnit.MILLISECONDS) public class SampleTimeout
{ @Test void test() throws Exception { TimeUnit.MILLISECONDS.sleep(5); } } w λΠϜΞτʢ໓ଟʹΘͳ͍ʣ
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"-͚ͩͲʣ
αʔυύʔςΟ w ཁ&YUFOTJPOͷొɻ
4QSJOH&YUFOTJPO // Spring @ExtendWith(SpringExtension.class) public class SampleSpringTest { // Spring
Boot @SpringBootTest public class SampleSpringBootTest { w 4QSJOH͏ͳΒɻ w 4QSJOH#PPU5FTUϝλΞϊςʔγϣϯͷྫʹͳΔɻ
4QSJOH#PPU5FTU w 4QSJOHϢʔβʔͳΒ׳ΕͯΔʢʁʣϝλΞϊςʔγϣϯɻ w +6OJUͩͱ4QSJOH#PPU5FTUͱ3VO8JUIΛซه͢Δඞཁ͕͋ͬͨɻ
w .PDLJUP+6OJU3VOOFSͷସɻ w NPDLJUPDPSFʹೖ͍ͬͯͳ͍ NPDLJUPNPDLJUPKVOJUKVQJUFS ͷͰҙɻ .PDLJUP&YUFOTJPO
+6OJU+VQJUFS#%%4PGU"TTFSUJPOT w "TTFSU+ͷ֦ுɻ w "GUFS&BDI$BMMCBDLͰ࣮ݱ͍ͯ͠Δɻ
&YUFOTJPOͷԼࢧ͑ ͬ͘͟Γɺ͔ΜͨΜʹɻ
&YUFOTJPOͷಈ͔͠ํ
&YUFOTJPOͷొ !&YUFOE8JUI !3FHJTUFS&YUFOTJPO 4FSWJDF-PBEFS
&YUFOTJPOͷొ
ొࡁΈ&YUFOTJPO w ͜Ε͕͋Δ͔Βඪ४ͷ֦ு͕&YUFOE8JUIͱ͔ͳ͠Ͱಈ͘
&YUFOTJPO$POUFYUʹཷΊΔ
&OHJOF&YFDVUJPO$POUFYU w &OHJOF&YFDVUJPO$POUFYUۭͬΆɻ w +VQJUFSͰͳ͍+6OJU1MBUGPSN&YUFOTJPOͳΜͯͬͨͬͪ͜Όͳ͍ɻ
&YUFOTJPO$POUFYU &YUFOTJPOͷ࣮ΫϥεͰ͏ ʢ͜ͱ͕ଟ͍ʣ ͬͯ͘Δ͔֦ுґଘ ʢ&YUFOTJPOΠϯλϑΣʔε ϝιου࣋ͨͳ͍ʣ
&YUFOTJPO$POUFYUͷड͚औΓ w ΠϯλϑΣʔεͷҾͰ͞ΕΔɻ w &YUFOTJPO$POUFYU͔ΒςετΠϯελϯεͳͲΛऔಘͯ͠৭ʑ͢Δɻ
֦ுϙΠϯτ ֦ுϙΠϯτ͝ͱʹΠϯλ ϑΣʔε͕༻ҙ͞Ε͍ͯΔɻ ݺͼग़͠+6OJUͤɻ ৽͍֦͠ுϙΠϯτΛ͢ͷ ͍͠ɻ
&YUFOTJPO)JFSBSDIZ w ߇͑Ίʹݴͬͯʹཱͨͳ͍ਤɻ
͚ΔͳΒ͜͏ʁ
$BMMCBDL͕ݺΕΔλΠϛϯά w 6TFS(VJEFࢀর
ྫΛڍ͛ͯΈΔ
%JTBCMFE$POEJUJPO
4QSJOH&YUFOTJPO 5FTU&YFDVUJPO-JTUFOFSʹͭͳ͙ Έ 1BSBNFUFSղܾɻ ػೳՃ5FTU&YFDVUJPO-JTUFOFSͰɻ 5FTU$POUFYUҾͬுΓग़͠৻ॏʹɻ
࣮ࡍΑ͘͏ͷ
&YUFOTJPOͷ࡞Γํ ؆୯ʹɻ
࡞Γํ ֦ுΠϯλϑΣʔ εΛૉʹ͏ɻ Γͳ͍ਓ FOHJOF࣮͢Ε ͍͍ʢී௨͠ͳ͍
Δ͜ͱ ࣮ΫϥεΛ࡞ &YUFOE8JUIͳͲͰొ w ؆୯Ͱ͠ΐʁ
࡞ͬͯΈΑ͏ ͳʹ͕͋ͬͯςετ௨ͬ ͯཉ͍͠ʂ
௨ͬͯཉ͍͠ςετ class MahouTest { @Test void ઈରࣦഊ͢Δ൵͍͠ςετ() { throw new
RuntimeException(); } }
֦ுରͷબ
֦ுରͷબ
ྫ֎ϋϯυϥΛ࣮ class MahouExtension implements TestExecutionExceptionHandler { @Override public void handleTestExecutionException(
ExtensionContext context, Throwable throwable) { } } w Կ͠ͳ͖ΌѲΓͭͿ͢͜ͱʹͳΔɻ
&YUFOE8JUIͰొ @ExtendWith(MahouExtension.class) class MahouTest { @Test void ઈରࣦഊ͢Δ൵͍͠ςετ() { throw
new RuntimeException(); } }
ͬͨʔ
શʹϚελʔͨ͠ w ͪͳΈʹ00.&#MBDL-JTUFEFYDFQUJPOͱͯ͠ಛผѻ͍͞ΕͯΔ͔Βμϝɻ
ઢ#MBDLMJTUFE&YDFQUJPOT w 0VU0G.FNPSZ&SSPS͚ͩଈ࣌ऴྃ͢Δɻʢ+6OJU1MBUGPSNʣ
࡞ͬͯΈΑ͏ ॓ ςετʹಠࣗΞϊςʔγϣϯ Λͬͨͷɻ ʢώϯτ࣍ͷϖʔδʣ
w TVQQPSUύοέʔδΛ͏ͷ͕ਪʢʹͳͬͪΌ͏͠ʣ w 4VQQPSUFE6UJMJUJFTJO&YUFOTJPOT
֦ுͷՖܗ 1BSBNFUFS3FTPMWFS ͩͱࢥ͏ w ͜͜ʹه͢ʹ༨ന͕ڱ͗͢ΔɻʢׂѪʣ
࡞Δͱ͖ͷϙΠϯτ ঢ়ଶ4UPSFͰѻ͏ ϝλΞϊςʔγϣϯΛ࡞Δ ҆શஔʹ߄ͯͳ͍
w ,FFQJOH4UBUFJO&YUFOTJPOT &YUFOTJPO4UPSF &YUFOTJPOʹঢ়ଶΛ࣋ͭͱ൵͍͜͠ ͱ͕ى͜Δɻ໘Ͱ4UPSFͰɻ ͍ํೋஈ֊ͷ.BQɻ .BQ/BNFTQBDF .BQ, 7 ͷΠϝʔδɻ͋͘·ͰΠϝʔδɻ
4UPSFͱ/BNFTQBDFͱ1BSFOUͱ w &YUFOTJPO7BMVF4UPSFΠϯελϯεͷϥΠϑαΠΫϧ&YUFOTJPO$POUFYUͱಉ͡ w 4UPSFΠϯελϯεHFU4UPSFͷͨͼʹ࡞ΒΕΔʢ͚ͲͲ͏Ͱ͍͍ʣ w /BNFTQBDF͍ʹ͍͘
ϝλΞϊςʔγϣϯ Ξϊςʔγϣϯʹ༩͢ΔΞϊςʔγϣϯ Ξϊςʔγϣϯͷهड़ͳͷͰੵۃతʹ ͏ &YUFOTJPO࡞ͬͨΒ&YUFOE8JUIͰΞϊςʔτ͠ ͨΞϊςʔγϣϯΛͱΓ͋͑ͣ࡞Δͱ͍͍ɻ +BWBඪ४ͷΈͰͳ͍ w .FUB"OOPUBUJPOTBOE$PNQPTFE"OOPUBUJPOT
҆શஔ͍ͭͯ·͢ w 5FTU*OTUBODF'BDUPSZͰOVMMΛฦͨ͠ w *OWPDBUJPO*OUFSDFQUPSͰϝιουݺͳ͔ͬͨ w มͳ͜ͱ͕Ͱ͖ͳ͘ͳͬͯΔɻͨͱ͑ςετϝιουΛݺͳ͘͢Δͱ͔ɻ
͜ΕͰ+6OJUΛ શʹϚελʔͨ͠ ʜʜͱݴ͍͍ͬͯͱࢥ͏ɻ ςετࣗମ10+0ͩ͠ɺΞαʔγϣϯํ๏બࣜɻ FOHJOFMBVODIFS+6OJU +VQJUFS Ͱͳ͘ɺ +6OJU1MBUGPSNͷͳͷͰɻ