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
380
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
45
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
880
Other Decks in Technology
See All in Technology
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
[2026-07-15] AI Ready なはずだったアーキテクチャと、見えてきた課題・次に目指す状態
wxyzzz
8
3.7k
SRE依存からの脱却 運用を開 発チームへ移す、 フルサイ クル開 発体制の実践
joooee0000
0
2.8k
AI Coding Agent時代のcdk-nagガードレール 〜組織ルールを強制CIで守り抜く設計の挑戦〜
mhrtech
3
170
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
240
環境凍結という Toil を倒す -セルフサービス型 Ephemeral テスト環境の 設計と実践
shirouz
1
2.4k
依頼文化をやめる日 EM視点で語るPlatform EngineeringとInclusive SRE / Discussing Platform Engineering and Inclusive SRE from an EM's Perspective
shin1988
4
5.5k
タスクの複雑さでモデルを選ぶ ── Thompson Samplingで動かす“トークン/コスト最適化
satohy0323
0
410
AIと共生する開発者プラットフォーム:バクラクのモノレポ×マイクロサービス基盤
sakajunquality
2
3.6k
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
150
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
0
140
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
250
Featured
See All Featured
Designing for Performance
lara
611
70k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
260
The Spectacular Lies of Maps
axbom
PRO
1
860
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
Are puppies a ranking factor?
jonoalderson
1
3.7k
A designer walks into a library…
pauljervisheath
211
24k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.8k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
450
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
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