Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
JUnit 5の拡張機能を完全にマスターした
irof
September 19, 2019
Technology
1
1.9k
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
13
16k
Javaの冗長な構文を愛でてみる / java-redundant-syntax
irof
1
470
自分のための道具作りのすすめ
irof
3
3.3k
IDE起点で2020年代の開発環境を眺めてみる
irof
3
7.3k
型による会話設計 powered by JIG
irof
1
330
Springアプリケーションのテスト道具 使いどころ、使わないどころ / decide-to-use-test-tool-for-spring-application
irof
4
7.6k
コードとモデルを一体に成長させるハンズオン / jig hands-on 201912
irof
1
67
モデリングのきほん #kanjava #mixleap
irof
4
4.1k
JIGの紹介
irof
11
3k
Other Decks in Technology
See All in Technology
音のような言葉 〜ちゃちゃっとチャットで楽しむちょっとしたコツ〜 / words like sounds
satoryu
1
1.4k
サーバレスECにおける Step Functions の使い方 〜ステートマシン全部見せます!〜
miu_crescent
0
190
The application of formal methods in Kafka reliability engineering
line_developers
PRO
1
190
Security Hub のマルチアカウント 管理・運用をサーバレスでやってみる
ch6noota
0
840
MoT TechTalk #12 タクシーアプリ『GO』大規模トラフィックを捌く分析データ基盤の全容に迫る!
mot_techtalk
1
370
Oracle Cloud Infrastructure:2022年6月度サービス・アップデート
oracle4engineer
PRO
0
140
PUTとPOSTどっち使う?
hankehly
0
260
Build 2022で発表されたWindowsアプリ開発のあれこれ振り返ろう
hatsunea
1
380
モブに早く慣れたい人のためのガイド / A Guide to Getting Started Quickly with Mob Programming
cybozuinsideout
PRO
2
1.8k
eBPF for Security Observability
lizrice
0
180
Retca Cloud
bau
0
520
アーキテクチャを明文化して開発に臨んだ話
akkie76
0
320
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
12
920
Designing on Purpose - Digital PM Summit 2013
jponch
106
5.6k
Automating Front-end Workflow
addyosmani
1351
200k
Making Projects Easy
brettharned
98
4.3k
jQuery: Nuts, Bolts and Bling
dougneiner
56
6.4k
The Language of Interfaces
destraynor
148
20k
Agile that works and the tools we love
rasmusluckow
319
19k
Reflections from 52 weeks, 52 projects
jeffersonlam
337
17k
Building an army of robots
kneath
299
40k
Testing 201, or: Great Expectations
jmmastey
21
5.4k
Art, The Web, and Tiny UX
lynnandtonic
280
17k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
100
5.9k
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ͷͳͷͰɻ