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
DBアクセスを伴う自動テストを書くときのプラクティス/Practices When Writ...
Search
yukana
September 26, 2024
Programming
1
84
DBアクセスを伴う自動テストを書くときのプラクティス/Practices When Writing Automated Tests with DB Access
yukana
September 26, 2024
Tweet
Share
More Decks by yukana
See All by yukana
Gradleよくわからんから脱する/Gradle Getting Started
yukana
0
75
Nice to haveな気づきに向き合う / Facing Nice to Have Awareness
yukana
1
55
ユニットテスト実行を 45% 高速化した Repository テスト戦略 / Repository Test Strategy Speeds up Unit Test
yukana
5
1.9k
Other Decks in Programming
See All in Programming
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
1.2k
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
250
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
1.1k
CSC307 Lecture 15
javiergs
PRO
0
260
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
540
PHPのバージョンアップ時にも役立ったAST(2026年版)
matsuo_atsushi
0
230
条件判定に名前、つけてますか? #phperkaigi #c
77web
2
670
AIに任せる範囲を安全に広げるためにやっていること
fukucheee
0
150
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
210
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
150
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
190
エンジニアの「手元の自動化」を加速するn8n 2026.02.27
symy2co
0
170
Featured
See All Featured
The Curse of the Amulet
leimatthew05
1
10k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
360
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.2k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
64
52k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
860
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
RailsConf 2023
tenderlove
30
1.4k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
490
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
480
SEO for Brand Visibility & Recognition
aleyda
0
4.4k
Transcript
DBアクセスを伴う結合テストを 書くときのプラクティス BABY JOB株式会社 第8回社内LT 2024/09/26 西牧 佑哉
大事なこと • テストの環境を本番とできるだけ合わせる ◦ テストの環境が本番と違っていると結果を信頼しづらくなる 2
テスト用DBのスキーマファイルを手動で管理しない 3
想定しているケース • DBの変更履歴をマイグレーションファイルで管理している • テスト用DBのセットアップのためにスキーマファイルを用意している 4
手動管理のデメリット • マイグレーションファイルの内容に合わせて変更するのが面倒 • ミスがあっても気づきづらい 5
どうするか? • スキーマファイルを用意しない ◦ テスト実行前にマイグレーションする • 自動生成する(ダンプする) ◦ マイグレーションに時間がかかる場合に有効 ◦
マイグレーション後に必ずスキーマファイルが生成/更新される仕組みにしておくと常に最新 に保てる 6
インメモリDBを使用しない 7
想定しているケース • ローカルではDockerで立てたDBを使用して開発している • テストではSQLiteやH2のようなインメモリDBを使用している 8
インメモリDBを使用するメリデメ • メリット ◦ セットアップが簡単 • デメリット ◦ 本番環境やローカルでの動作確認時と異なる挙動をする可能性がある ▪
つまり、テスト結果を信頼しづらい 9
どうするか? • ローカルや本番と同じDBを使用する ◦ Testcontainersを使うと簡単にできる! 10
テストの準備、実行、検証を 同一トランザクション上で行わない 11
想定しているケース • テスト実行時の挙動 1. トランザクション開始 a. 準備(テスト用のデータのインサート) b. 実行(例:何らかの保存処理) c.
検証(例:DBからデータを取得して保存した内容の確認) 2. ロールバック 12
同一トランザクションで行うメリデメ • メリット ◦ テスト終了後にロールバックしてテストデータの後始末ができる • デメリット ◦ 本番では準備、実行、検証が同一トランザクション上で行われない ▪
つまり、テストと本番でやっていることが異なる 13
どうするか? • 各フェーズごとにトランザクションを分ける • テストデータの後始末はテスト前に行うようにする ◦ 他のテストに依存せずに、確実にクリーンアップできる 14
参考 • 単体テストの考え方/使い方 15
まとめ • テスト用DBのスキーマファイルを手動で管理しない • インメモリDBを使用しない • テストの準備、実行、検証を同一トランザクション上で行わない 16