Slide 1

Slide 1 text

2024/09/11 RustのWebアプリ開発 LT道場 〜テスト編〜 DBを使ったテストで詰まった点とその対策 01 1


Slide 2

Slide 2 text

02 2
 西村 憲悟 [にしむら けんご] ファインディ株式会社 / バックエンド  @sontixyou

Slide 3

Slide 3 text

● Webアプリケーションのテストで直面した課題 ● 問題に対しての解決アプローチ ● まとめ 今日話すこと
 03 3


Slide 4

Slide 4 text

今日話さないこと
 04 ● テストデータの作成を楽にする方法 ● どこの月見バーガーがうまいのか 4


Slide 5

Slide 5 text

● 実行を短時間で終わらせたい ● テストケース間で干渉しないようにテス トしたい テストに対してのモチベーション
 05 5


Slide 6

Slide 6 text

アプリケーションの構成 
 06 6
 アプリケーション
 DB
 ORM: sea-orm https://github.com/SeaQL/sea-orm

Slide 7

Slide 7 text

アプリケーションコード 
 07 7
 DBコネクションしてから 
 postテーブルにレコードを作成 
 DBコネクションしてから 
 postテーブルにあるレコードを更新 


Slide 8

Slide 8 text

テストコード
 08 8


Slide 9

Slide 9 text

各テストがひとつのDBを使う状態で cargo testするとどうなるのか? テストの問題点
 09 9


Slide 10

Slide 10 text

● 複数のテストが同じDBにデータを読み書きすると、 テスト同士で影響が出る ○ テストが失敗したり、flakyになる テストの問題点
 10 10


Slide 11

Slide 11 text

ユニーク制約ぐぬぬ DBのユニーク制約にひっかかり、自分が作りたいデータ を作成できない テストの問題点
 11 11


Slide 12

Slide 12 text

● △ 実行を短時間で終わらせたい ● ✗ テストケース間で干渉する  テストの問題点
 12 12


Slide 13

Slide 13 text

cargo testをすると並列でテストが実行されるため https://doc.rust-lang.org/book/ch11-02-running-tests.html#running-tests-in-parallel-or-consecutively DBへCRUDする場合での難しさ
 13 13


Slide 14

Slide 14 text

● テストケースごとにDBを分ける ● 並列数を1にする ○ cargo testのオプションで可能 ● モックDBを使う ○ sea-ormでサポートされている 対応方法候補
 14 14


Slide 15

Slide 15 text

● テストケースごとにDBを分ける ● 並列数を1にする ● モックDBを使う 対応方法候補
 15 15


Slide 16

Slide 16 text

テスト実行前にDBを作成。 実行後にDBを削除する。 ↓ test_contextを使用することで実現可能になる。 https://docs.rs/test-context/latest/test_context/ テストケースごとにDBを分ける 準備編
 16 16


Slide 17

Slide 17 text

テストケースごとにDBを分ける 実装編
 17 17


Slide 18

Slide 18 text

テストケースごとにDBを分ける 実装編
 18 18
 setupとteardown関数を呼び出す下準備


Slide 19

Slide 19 text

テストケースごとにDBを分ける 実装編
 19 19
 テストに対してのモチベーション
 ● ✅ テスト実行を短時間で終わる ● ✅ テストケース間で干渉しない

Slide 20

Slide 20 text

テストケースごとにDBを分ける 実装編
 20 20
 実装の詳細はこちらを見てほしい🦀 https://github.com/sontixyou/sea_orm_practice_db2024

Slide 21

Slide 21 text

まとめ
 21 21
 ● 並列でテスト実行をするときはDBの接続先に気 をつけよう ● sea-ormを使う際は一工夫が必要 ○ 自前実装が手間ならsqlxを使うのも手

Slide 22

Slide 22 text

宣伝
 開催日時: 10月 8日 (火曜日) 19:30~ ↓詳細はこちら↓ 22 22
 🦀Rust地域コミュニティ🦀 Osaki.rs はじめました!!