Closed4
DBが絡むテストはどう書くのが一番いいのだろうか。
データベースが絡むテストはテストを実行するたびにデータベースの状態を意識する必要があって難しい。モックを使って、DBを絡めず状態を意識せずにテストを行うか、状態の整合性を確保しつつDBを絡めてテストを行うか。どうするのが良いのだろう。
状態の整合性を確保しないパターン
- XUnit系が提供するMockを使う
状態の整合性を確保するパターン
- テスト時の接続先をsqliteのような使い捨てDBに接続を切り替えて書き込んでテストする
- Dockerに環境を作ってその中でテストする
- テストコードにinsertしたコードは削除するコードを入れる
状態の整合性を確保しないパターン
Mockテスト
状態の整合性を確保するパターン
- の場合は、実際に稼働させる環境と異なるテストになってしまう
- 実際の環境にかなり近づけることができるし、Dockerなので環境が汚れても全然気になる
- 実際の環境にさらに近づけることができるが共有している開発環境に各人が行っているテストを混ぜ込むのはアリなんだろうか
CI/CDにテストを組み込んだ時、DBが絡んだテストは書きづらくなる気がするがどうだろう。Dockerを立ち上げてその中でテストするみたいなことはできるんだろうか。
ユニットテストを厚くしたいけど、モックを交えたテストを書くハードルって若干高いなって感じた。
このスクラップは2021/09/17にクローズされました