Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JUnit 5の拡張機能を完全にマスターした
Search
irof
September 19, 2019
Technology
1
2.8k
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
1
53
アーキテクチャと考える迷子にならない開発者テスト
irof
9
3.6k
技術的負債の正体を知って向き合う
irof
0
640
関ジャバと言う場
irof
0
170
型で語るカタ
irof
2
1.4k
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
400
複数アプリケーションを育てていくための共通化戦略
irof
9
5.2k
SpringBootにおけるオブザーバビリティのなにか
irof
1
1.2k
Javaアプリケーションモニタリングの基本
irof
7
2.8k
Other Decks in Technology
See All in Technology
形式手法特論:CEGAR を用いたモデル検査の状態空間削減 #kernelvm / Kernel VM Study Hokuriku Part 8
ytaka23
2
460
re:Inventで気になったサービスを10分でいけるところまでお話しします
yama3133
1
120
AIプラットフォームにおけるMLflowの利用について
lycorptech_jp
PRO
1
140
大企業でもできる!ボトムアップで拡大させるプラットフォームの作り方
findy_eventslides
1
760
regrowth_tokyo_2025_securityagent
hiashisan
0
240
MLflowで始めるプロンプト管理、評価、最適化
databricksjapan
1
220
Power of Kiro : あなたの㌔はパワステ搭載ですか?
r3_yamauchi
PRO
0
140
業務のトイルをバスターせよ 〜AI時代の生存戦略〜
staka121
PRO
2
180
評価駆動開発で不確実性を制御する - MLflow 3が支えるエージェント開発
databricksjapan
1
180
多様なデジタルアイデンティティを攻撃からどうやって守るのか / 20251212
ayokura
0
450
AIと二人三脚で育てた、個人開発アプリグロース術
zozotech
PRO
1
730
Haskell を武器にして挑む競技プログラミング ─ 操作的思考から意味モデル思考へ
naoya
6
1.5k
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
Bash Introduction
62gerente
615
210k
Designing for Performance
lara
610
69k
How to Ace a Technical Interview
jacobian
280
24k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
RailsConf 2023
tenderlove
30
1.3k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
730
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
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ͷͳͷͰɻ