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
ScalaでもDBのテストをしよう
Search
Kazumune Katagiri
April 09, 2016
Technology
390
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ScalaでもDBのテストをしよう
DbUnit?現役ですよ!
Kazumune Katagiri
April 09, 2016
More Decks by Kazumune Katagiri
See All by Kazumune Katagiri
50歳目前開発者の AI との付き合い方
nemuzuka
0
54
AWS を使ったシステムのテスト方針 #jawsug #jawsug_niigataken #nds60
nemuzuka
2
3.1k
フリーランスで割と長くリモートでやってる僕が気をつけていること
nemuzuka
1
13k
Vue.jsから始めるDOMにデータを持たせないアプリケーション開発への第1歩
nemuzuka
1
4.7k
わたしがみんなにオススメするBetter JavaとしてのScala
nemuzuka
1
890
Other Decks in Technology
See All in Technology
トークンマネジメントでAIにとって働きやすい環境を実現する
hikaruegashira
0
120
Flutter × BLE Centralを自前Pluginで実装する設計パターン - MethodChannel / EventChannelで作る双方向ブリッジの実践 / Building Custom Flutter BLE Central Plugins: Bidirectional Bridging with Method & Event Channels
bitkey
PRO
0
190
Head First モブプログラミング / Head First Mobprogramming
takaking22
10
12k
【GCC2026】鉄拳8でのVFX開発事例
bandainamcostudios
PRO
0
120
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
2.7k
コネクションをピン留めさせずに SELECTクエリのタイムアウトを設定した話
codmoninc
0
180
【書籍出版記念】 10周回って、エージェント開発は RAGがすべてだった。〜RAGの歴史と開発現場で見えた実践知〜
akiratameto
3
410
My broken English still works: speaking at global OSS events
naruoga
0
120
MIXIで活躍できるエンジニアを 若手社員目線で考えてみる
mixi_engineers
PRO
0
110
なぜ Temporal の大小比較には compare しかないのか / Why Does Temporal Only Have compare() for Comparisons
kazukihayase
1
180
AI画像認識を活用したゲーム内決済処理検証の自動化
gree_tech
PRO
0
100
まちスペース®とデジタルツインと「まちづくり」
hiro_ogi
0
130
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
470
Design in an AI World
tapps
1
280
My Coaching Mixtape
mlcsv
0
250
So, you think you're a good person
axbom
PRO
2
2.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
370
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
660
Leo the Paperboy
mayatellez
8
2.2k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
400
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
210
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
410
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
470
Transcript
ୈ47ճ ԬITٕज़ऀษڧձ ScalaͰDBͷςετ Λ͠Α͏ 2016/4/9 @nemuzuka
Έͳ͞Μɺςετͯ͠·͔͢ʁ
ݱ࣮ݫ͍͠… • εέδϡʔϧݫक(ࣄͰ͋Εঘߋ) • ߟ͑ΒΕΔશ෦ͷςετέʔεΛཏͯ͠ςε τΫϥεʹམͱ͜͠Ήͷʮਖ਼͍͠ʯ͚ΕͲ ͔͔࣌ؒΔ͠ɺςετΫϥεͷϝϯς ͔ʹͳΒͳ͍ ݶΒΕͨ࣌ؒͷதͰͬͯΔΑɺ ͱ͍͏τίϩ͕΄ͱΜͲͰʁ
Δ͖ॴ͚ͩ ͋·ΓखؒΛ͔͚ͣʹ ςετ͍ͨ͠…
ͦΜͳதͰDB(SQL)ͷςετɺ ͬͯ·͔͢ʁ
ׂʹ͋Θͳ͍…ʁ • ςετ͕Ͱ͖Δڥ͕ඞཁ • ଓઌΛςετ/։ൃ/ຊ൪ͰΓସ͑ΒΕΔΑ͏ͳΈ • ςετ࣮ߦʹ͕͔͔࣌ؒΓ͗͢Δ ʮSQLʹىҼ͢Δόάͷ݅ʯ͕ແࢹͰ͖ͳ͍ ɹͷͰ͋Ε࣮ࢪͨ͠΄͏͕ྑ͍͔͠Ε·ͤΜ
ͲΜͳύλʔϯΛςετ͢Δʁ • 1ςʔϒϧʹର͢ΔCRUD • ෳͷςʔϒϧΛ݁߹ͯ͠Ұཡʹදࣔ͢Δselect • ݁߹͕݅߹ͬͯͳ͍ͷऔΕͯ͜ͳ͍͜ͱ • ಈతʹݕࡧ͕݅มΘΔ߹Ͱظ͢Δσʔλ͕औΕΔ͜ͱ σʔλͷύλʔϯʹΑͬͯ
ఆ֎ͷ݁ՌΛฦ͍͢͠ͷͰςετ͖͢ ORMΛׂ͑Ѫͯ͠ྑ͍͔͠Εͳ͍
ʮ͡Ό͋ɺࠓճͷϓϩδΣΫτΓ·͔͢ʯ ͱݴΘΕͯ߄ͯͳ͍ҝʹ
DBΛͬͨςετͷྲྀΕ • ४උ • ୯ମςετ༻ͷεΩʔϚ/tableΛ༻ҙ(σʔλۭ) • ࣮ࢪ(ςετΫϥε) • 1. લఏ݅ͱͳΔσʔλΛొ
• 2. ࣮ࡍʹSQLΛൃߦͯ͠ςετ࣮ࢪɺ݁ՌΛ֬ೝ • 3. rollback(σʔλtableʹΒͳ͍)
લఏ݅ͱͳΔσʔλΛొ • DBΛͬͨςετΛ͢Δʹɺtableʹσʔλ͕ೖͬͯ ͍ͳ͍ͱSQLͰ݁Ռ͕औΕͣςετͱͯ͠Γཱͨͳ͍ • ͱݴ͑ɺtableͷલఏ݅Λຬͨͨ͢Ίʹɺ֤tableʹ ର͍͍ͯͪͪ͠InsertจΛॻ͘ͷ໘Ͱ͔ͬͨΔ͍ օ͞Μ͕͓͍ͷ։ൃݴޠɾFWͰָͰ͖ͯ·͔͢ʁ
ࢲɺScala / Skinny Framework • ScalaͷϑϧελοΫͳ WebΞϓϦέʔγϣϯ ։ൃϑϨʔϜϫʔΫ • ςετͷลΓखް͘
αϙʔτ
FactoryGirl • InsertจΛهड़͢Δ͜ͱແ͘ɺςετΫϥε͔Βલఏ݅ͷσʔλΛొ͢Δ͜ͱ͕Ͱ͖Δ • σʔλͷதʹγεςϜΛઃఆ • ొͨ͠id߲Λผtableͷ֎෦Ωʔͱͯ͠ઃఆ [ςετΫϥε] val company1
= FactoryGirl(Company).create() val country = FactoryGirl(Country, 'countryyy).create() val factory = FactoryGirl(Member).withVariables('countryId -> country.id) val member = factory.create('companyId -> company1.id, 'createdAt -> DateTime.now) [ઃఆϑΝΠϧ] countryyy { name="Japan" } member { countryId="#{countryId}" } company { name="FactoryGirl, Inc." } ઃఆϑΝΠϧΛݩʹσʔλΛొɻ ඞཁʹԠͯ͡ςετΫϥεଆͰઃఆ͢Δ
ϓϩάϥϜͰॻ͚Δͷخ͍͚͠Ͳ… • ςετσʔλΛ֬ೝ͢ΔࡍɺςετΫϥεΛݟͯɺͲ͏͍͏ͷ͕ೖ͍ͬͯ Δ͔Θ͔ΓͮΒ͍ • ෳͷtableΛ݁߹ͯ͠select͍ͯ͠ΔΑ͏ͳॲཧͷςετ • ४උσʔλͷొॲཧͰςετΫϥεͷେΛకΊͳ͍ʁϝϯςେมͦ͏… • ςετ༻ͷσʔλΛ20݅͘Β͍༻ҙ͍ͨ࣌͠
tableදܗࣜͰݟͨΓཧͰ͖ͨํ͕͏Ε͋͘͠Γ·ͤΜ͔ʁ
͜͏͍͏ͷͰɻ
ͱ͍͏͜ͱͰɺDbUnit • ExcelΛσʔλϑΝΠϧͱͯ͠ಡΈࠐΜͰɺલఏ ݅ͱͳΔtableͷঢ়ଶʹͯ͘͠ΕΔπʔϧ • ScalaͳͷͰɺJavaͷϥΠϒϥϦʹ؆୯ΞΫηε
ExcelϑΝΠϧͷϧʔϧ • γʔτ໊ˠtable໊ • 1ߦˠΧϥϜ໊ • 2ߦҎ߱σʔλ ɾγʔτ໊ͷ্ݶ31จࣈˠtable໊͕31จࣈΛ͑Δͱ...Ξτ ɾࠨͷγʔτ͔Βॱʹొ͍͖ͯ͠·͢ɻ ɾxlsxܗࣜͰͰ͖·͢
demo.
Ͷɺ؆୯ͦ͏Ͱ͠ΐʁ • ScalaTestΛ͏͜ͱͰRSpecͷΑ͏ʹॻ͚Δ • AutoRollback traitΛ༻͢Δ͜ͱͰςετ࣮ߦޙࣗಈͰrollback͢Δ • ෳ݅औಘ͢ΔSQLͷςετͷ߹ɺorder by Λ͚ͭͯৗʹಉ͡ॱ൪ͰऔಘͰ͖ΔΑ͏ʹҰ
• ֎෦ΩʔΛ͍ͬͯΔ࣌ɺσʔλͷొॱʹҙ • ςʔϒϧΛઌʹొ • ExcelͷσʔλಡΈࠐΈͰΤϥʔʹͳΔ࣌ • จࣈྻܕͷΧϥϜͳͷʹɺηϧ͕ / ʹͳͬͯΔ͔ • ηϧΛจࣈྻܕʹ͢Δͱ͏·͘ߦ͘͜ͱ͕ଟ͍
·ͱΊ • DB෦ͷςετࣗಈԽͨ͠ํ͕ྑ͍ͱࢥ͍·͢ • ςετσʔλΛExcelͰཧ͢ΔਓؾΛ্͍͖͛ͯ ͍ͨ #nds24 http://www.slideshare.net/kkatagiri/nds24-11327909 ࠓճͷιʔείʔυ https://github.com/nemuzuka/skinny-db-test