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
Startup Spock #javajo
Search
kyonmm
PRO
March 25, 2017
Technology
0
2.5k
Startup Spock #javajo
Java女子部でSpockのハンズオンをしたときのスライドです。
kyonmm
PRO
March 25, 2017
Tweet
Share
More Decks by kyonmm
See All by kyonmm
地方中小企業のエンジニアから大企業の執行役員になるまで #phpcon_niigata / road to executive
kyonmm
PRO
7
14k
ソフトウェアテストのグローバルトレンド 2025 #scrumniigata / software-test global trend 2025
kyonmm
PRO
11
7.1k
Engineering Managementのグローバルトレンド #emoasis / Engineering Management Global Trend
kyonmm
PRO
6
1.3k
フレームワークを生み出すメタフレームワークという考え方 -適応型から生成型へ- #RSGT2025 / From adaptive to generative
kyonmm
PRO
4
4.3k
SRE NEXT 2024 スライドみただけの感想 / Just a quick look at the slides for SRE NEXT 2024
kyonmm
PRO
2
580
Living Process #RSGT2024
kyonmm
PRO
3
2.8k
アジャイルクイズ王 2024 #RSGT2024 / agile quiz king 2024
kyonmm
PRO
0
210
プロダクトマネジメントのグローバルトレンド #pmconf2023 / Global Trends in Product Management
kyonmm
PRO
3
7.8k
スタートアップのためのアジャイルプラクティス -論文100本ノック- #xpjug / Agile Practice for Startup - Papers -
kyonmm
PRO
4
2.2k
Other Decks in Technology
See All in Technology
mrubyと micro-ROSが繋ぐロボットの世界
kishima
2
380
製造業からパッケージ製品まで、あらゆる領域をカバー!生成AIを利用したテストシナリオ生成 / 20250627 Suguru Ishii
shift_evolve
PRO
1
160
怖くない!はじめてのClaude Code
shinya337
0
290
rubygem開発で鍛える設計力
joker1007
2
270
作曲家がボカロを使うようにPdMはAIを使え
itotaxi
0
380
AWS Summit Japan 2025 Community Stage - App workflow automation by AWS Step Functions
matsuihidetoshi
1
310
GeminiとNotebookLMによる金融実務の業務革新
abenben
0
240
React開発にStorybookとCopilotを導入して、爆速でUIを編集・確認する方法
yu_kod
1
100
MySQL5.6から8.4へ 戦いの記録
kyoshidaxx
1
300
Yamla: Rustでつくるリアルタイム性を追求した機械学習基盤 / Yamla: A Rust-Based Machine Learning Platform Pursuing Real-Time Capabilities
lycorptech_jp
PRO
4
170
モバイル界のMCPを考える
naoto33
0
350
ビギナーであり続ける/beginning
ikuodanaka
1
190
Featured
See All Featured
Optimizing for Happiness
mojombo
379
70k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
720
The Language of Interfaces
destraynor
158
25k
Testing 201, or: Great Expectations
jmmastey
42
7.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
500
Fireside Chat
paigeccino
37
3.5k
Bash Introduction
62gerente
614
210k
Designing for Performance
lara
609
69k
Balancing Empowerment & Direction
lara
1
390
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Faster Mobile Websites
deanohume
307
31k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Transcript
STARTUP SPOCK #JAVAJO kyon_mm 2017/03/25 1
SELF INTRODUCTION • ͖ΐΜ : @kyon_mm גࣜձࣾΦϯβϩʔυ • ςετΞʔΩςΫτɺδΣωϥϦετ •
Groovy, F#, C#, Scala • جૅษڧձ, TDDBootCamp, ͳ͔͝Scrum 2
THIS SESSION : TARGET • Javaݴޠͷجຊจ๏ͳΜͱͳ͘Θ͔͍ͬͯ ͯɺίʔυΛ͔͍ͨΓͰ͖Δɻ • Can you
code FizzBuzz ? 3
THIS SESSION : GOAL • SpockͰ؆୯ͳίʔυΛॻ͚ΔΑ͏ʹͳΔɻ 4
NO • Groovy LanguageΛ͍͜ͳ͢ • SexyͳCodeΛٻ͢Δ 5
MENU • https://github.com/kyonmm/startup-spock • Groovy Language for Java Language User
• Getting Start Spock • Spock with TDD 6
GROOVY LANGUAGE • Groovyͱ • Java8ඇޓͳͷ • ͓֮͑ͯ͘ͱศརͳͷ 7
GROOVYͱ • ਐతܕ͖(੩తܕݕࠪΦϓγϣϯ) • JVMͰಈ࡞͢Δɻgroovy-all.jarͱҰॹʹ͏ɻ • GradleɺJenkinsfileGroovyͷDSLɻ 8
GROOVYͱ • Java6ͱ΄΅ޓੑΛ͍ͨͬͯΔ͕ɺ Java7,Java8ͷ৽ػೳͱҰ෦ޓੑ͕ͳ͍ɻ (Java6Ҏલ͔ΒಠࣗͰ࣮͍ͯͨ͠Γͱ͔) • IntelliJ IDEA + Gradle
+ Spock͕ఆ൪ • OO͕ϕʔεɻޠኮRubyɺPythonͬΆ͞ɻ 9
GROOVY LANGUAGE • Groovyͱ • Java8ඇޓͳͷ • ͓֮͑ͯ͘ͱศརͳͷ 10
Ҏ߱ͷηογϣϯͷͨΊʹ ڥߏங • ιʔείʔυΛߋ৽ͨ͠ͷͰɺGitHub͔Β࠷৽ͷιʔείʔυΛམ ͱ͖͍ͯͯͩ͘͠͞ɻ(git reset --hard; git pull;) •
IntelliJ IDEAͷ࣍ͷઃఆΛ͠·͠ΐ͏ɻ • Plugins -> Spock -> Install • Build Project Automatically • Edit Configurations -> Defaults -> JUnit -> Before LaunchͷBuildΛબ ͯ͠আ( - ϘλϯΛΫϦοΫ) 11
JAVA8ͱඇޓͳͷ • ϥϜμͷΘΓʹΫϩʔδϟΛ͏ • ϝιουࢀরɺίϯετϥΫλࢀর͕ͳ͍ • try-with-resource͕͑ͳ͍ • ྻϦςϥϧ͕͑ͳ͍ 12
ϥϜμͷΘΓʹΫϩʔδϟ Λ͏ • ϥϜμ • ࣜɻJava7·ͰؔΦϒδΣΫτͰ࣮ݱ͍ͯͨ͠Γɻ • GroovyͰϥϜμͷॻ͖ํΛαϙʔτ͍ͯ͠ͳ͍ɻ • GroovyͰΫϩʔδϟͰ࣮ݱ͢Δɻ
• src/test/groovy/example/startup/incompatible/java8/ Lambda.groovy 13
ϝιουࢀরɺ ίϯετϥΫλࢀর͕ͳ͍ • ϝιουࢀর • Ϋϥε໊::ϝιου໊,ΦϒδΣΫτ໊::ϝιου໊ (ಛʹ)ϥϜμͱͷซ༻Ͱ؆ܿͳهड़Λ࣮ݱͰ͖Δɻ Stream.of("javajo", "jjug", "kyon_mm").forEach(System.out::println)
• GroovyͰϝιουࢀরɺίϯετϥΫλࢀরͷॻ͖ํΛαϙʔτ͍ͯ͠ͳ͍ɻ • GroovyͷΫϩʔδϟͰҾΛ໌ࣔ͠ͳ͍ͱ͖ݩͷΦϒδΣΫτ͕ it ͰΘͨͬ ͯ͘ΔͷͰɺ{ println(it) }ͷΑ͏ʹ͏ɻ • src/test/groovy/example/startup/incompatible/java8/MethodReference.groovy 14
TRY-WITH-RESOURCE • try-with-resource • ྫ֎Λߟྀͨ͠Ϧιʔε(IO)ͷΫϩʔζΛࣗಈతʹͬͯ͘ΕΔ • GroovyͰtry-with-resourceͷॻ͖ํΛαϙʔτ͍ͯ͠ͳ͍ɻ • ͨͩ͠ɺସखஈͱͯ͠ withCloseable
ϝιουΛ͏͜ͱ͕Ͱ͖ Δɻ • src/test/groovy/example/startup/incompatible/java8/ TryWithResource.groovy 15
ྻϦςϥϧ͕ͳ͍ • ྻϦςϥϧ • int[] xs = new int[]{1,2,3}; •
GroovyͰ{}ΫϩʔδϟͳͷͰΤϥʔʹͳΔ • ϦετϦςϥϧͰArrayListΛੜͯ͠ɺޙΖʹas int[] Λه͢ Δɻ • src/test/groovy/example/startup/incompatible/java8/ ArrayLiteral.groovy 16
Α͘ΈΔͰ͋Ζ͏ Τϥʔϝοηʔδ • groovy.lang.MissingMethodException: No signature of method: example.startup.groovy.Keyword.newMethod() •
example.startup.groovy.Keyword.newMethod͍ͬͯ͏ϝ ιουͳ͔ͬͨΑ • groovy.lang.MissingPropertyException: No such property: y for class: example.startup.groovy.Keyword • KeyWordΫϥεʹy͍ͬͯ͏ϓϩύςΟͳ͔ͬͨΑ 17
GROOVY LANGUAGE • Groovyͱ • Java8ඇޓͳͷ • ͓֮͑ͯ͘ͱศརͳͷ 18
͓֮͑ͯ͘ͱศརͳͷ • ϦετϦςϥϧ • ϚοϓϦςϥϧ • จࣈྻϦςϥϧ • ਖ਼نදݱϦςϥϧ •
GroovyͷίϨΫγϣϯૢ࡞ϝιουͱJavaͷstreamͱͷൺֱ 19
GROOVYͰΑ͔ͭ͘͏ॻ͖ํ • defͰએݴ • ςετϝιου໊จࣈྻએݴ 20
ͦͷଞҙ • booleanΛظ͞ΕΔॴ(ex. if(x))ʹɺBoolean Ҏ֎ͷࢀরܕ͕͍ͬͨ߹ͳ͍߹ ࣍ͷنଇͰఆ͞Ε·͢ɻ • "", [], [:],
0, null -> false • ͦΕΒҎ֎ -> true 21
MENU • Groovy Language for Java Language User • Getting
Start Spock • Spock with TDD 22
• Spockͱ • JUnitͱͷൺֱ • Spockͷ͍͔ͨ 23
SPOCKͱ • JUnit4ϕʔεͷGroovyͷςεςΟϯάϑϨʔ ϜϫʔΫ • BDDΛҙ͍ࣝͯ͠Δ • powerassert Spock͕ΦϦδϯ(ͩͱࢥ͏) 24
JUNITͱͷൺֱ 25 JUnit Spock Specification Ϋϥε spock.lang.SpecificationΛܧঝ Feature Method @Test
SpockͷϥϕϧΛ༻͢Δϝιου Helper Method ϝιουએݴ @Share Fixture Method @Before setupϝιου Fixture Method @After cleanupϝιου Fixture Method @BeforeClass setupSpecϝιου Fixture Method @AfterClass cleanupSpecϝιου
SPOCKͷ͍͔ͨ • Specification • given, when, then, and, where •
power assert • setup, teardown, setupSpec, cleanupSpec • @Unroll, @Shared, @Ignore 26 src/test/groovy/example/startup/spock ԼΛΈͳ͕Β
MENU • Groovy Language for Java Language User • Getting
Start Spock • Spock with TDD 27
SPOCK WITH TDD • SpockͰTDDΛϖΞϓϩάϥϛϯάͰͬͯΈ· ͠ΐ͏ɻ • ͓ʮλεΫϦετ(λεΫཧπʔϧ)ʯͷ։ൃ Ͱ͢ɻ •
ࠓճγεςϜͷೖྗ෦লུ͠·͢ɻ(CUI, GUI ͷ։ൃলུ͠·͢ɻ) 28
λεΫϦετ • λεΫ໊ͱظΛొͨ͠ΓɺొࡁΈͷ ͷΛࢀরͨ͠Γɺআͨ͠ΓͰ͖Δɻ • λεΫ໊ظͰݕࡧͰ͖Δɻ 29
TaskList ---------------------- add(Task) : TaskList delete(Task) : TaskList list(Task) :
List<Task> search(String) : List<Task> search(Date, Date) : List<Task> searchFrom(Date) : List<Task> searchTo(Date) : List<Task> Task ---------------------- title : String dueTo : Date * 30
TDD • ςετۦಈ։ൃ(Test Driven Development) • ςετ࣮ -> ϓϩμΫτ࣮ ->
ϦϑΝΫλ Ϧϯά ͷ܁Γฦ͠Ͱ։ൃ͢Δɻ • ઃܭ͓Αͼੳͷख๏ 31
TDD3ݪଇ • ϓϩμΫτίʔυࣦഊ͢ΔςετίʔυΛ ޭͤ͞ΔͨΊ͚ͩʹॻ͘ • ςετίʔυࣦഊͤ͞ΔͨΊ͚ͩʹॻ͘ • ෳͷςετΛޭͤ͞ΔΑ͏ͳϓϩμΫτ ίʔυΛॻ͍͍͚ͯͳ͍ 32
ࠓΔTDDϥΠΫͳ։ൃ ςετ࣮ฤ 1. (͠ɺ͍·͔Β࣮͠Α͏ͱ͍ͯ͠Δͷطʹ୭͔͕࣮͠ ͯ͘Ε͍ͯͨΒ) ͲΜͳखॱͰɺͦΕΛ͏ͷ͔? 2. 1Ͱࢥ͍͍͍ͭͨํΛຊޠͰɺٙࣅίʔυͰ͍͍ͷͰς Ωετʹ͢Δɻ 3.
ͦΕΛSpockͷgiven, when, thenʹ͋ͯΊΔɻ 4. ਖ਼͍͠Groovyίʔυʹ͢Δɻ 33
ࠓΔTDDϥΠΫͳ։ൃ ϓϩμΫτ࣮ฤ 1. ςετΛ࣮ͨ͠Βςετ͕ಈ࡞͢ΔΑ͏ͳϓϩ μΫτΛ࣮͢Δɻ 2. ͠ɺ15ͨͬͯςετ͕ޭ͠ͳ͔ͬͨΒɺ͍ ·࣮ݱ͠Α͏ͱ͍ͯ͠ΔςετίʔυΛ@Ignore͠ ͯɺ͏͢͜͠খ͍͞ৼ͍Λ࣮ݱ͢Δςετίʔ υΛهड़ͯ͠ɺ࠶ϓϩμΫτ࣮ʹઓ͢Δɻ
34
ࠓΔTDDϥΠΫͳ։ൃ ϦϑΝΫλϦϯάฤ 1. ϓϩμΫτίʔυͷॏෳ͕͋Εڞ௨Խ 2. ςετίʔυͷॏෳ͕͋Εڞ௨Խ 3. ໊લʹҧײ͕͋ΕϦωʔϜϝιου ͷҠಈɺநग़ 35
λεΫϦετ • λεΫ໊ͱظΛొͨ͠ΓɺొࡁΈͷ ͷΛࢀরͨ͠Γɺআͨ͠ΓͰ͖Δɻ • λεΫ໊ظͰݕࡧͰ͖Δɻ 36
TaskList ---------------------- add(Task) : TaskList delete(Task) : TaskList list(Task) :
List<Task> search(String) : List<Task> search(Date, Date) : List<Task> searchFrom(Date) : List<Task> searchTo(Date) : List<Task> Task ---------------------- title : String dueTo : Date * 37
λεΫϦετ:Ճ͓ • λεΫ໊ͱظΛొͨ͠ΓɺొࡁΈͷͷΛ ࢀরͨ͠Γɺআͨ͠ΓͰ͖Δɻ • λεΫ໊ظͰݕࡧͰ͖Δɻ • λεΫΛӬଓԽ͓ͯ͘͜͠ͱͰɺΞϓϦ͕ऴྃ͠ ͯλεΫΛ͓͚ͯ͠Δ(JSONͱ͔CSVʹग़ྗ͠ ͯಡΈͩͤΔΑ͏ʹ͢Δ)
38