Closed4

DBが絡むテストはどう書くのが一番いいのだろうか。

たろこふすきーたろこふすきー

データベースが絡むテストはテストを実行するたびにデータベースの状態を意識する必要があって難しい。モックを使って、DBを絡めず状態を意識せずにテストを行うか、状態の整合性を確保しつつDBを絡めてテストを行うか。どうするのが良いのだろう。

状態の整合性を確保しないパターン

  1. XUnit系が提供するMockを使う

状態の整合性を確保するパターン

  1. テスト時の接続先をsqliteのような使い捨てDBに接続を切り替えて書き込んでテストする
  2. Dockerに環境を作ってその中でテストする
  3. テストコードにinsertしたコードは削除するコードを入れる
たろこふすきーたろこふすきー

状態の整合性を確保しないパターン

Mockテスト

状態の整合性を確保するパターン

  1. の場合は、実際に稼働させる環境と異なるテストになってしまう
  2. 実際の環境にかなり近づけることができるし、Dockerなので環境が汚れても全然気になる
  3. 実際の環境にさらに近づけることができるが共有している開発環境に各人が行っているテストを混ぜ込むのはアリなんだろうか
たろこふすきーたろこふすきー

CI/CDにテストを組み込んだ時、DBが絡んだテストは書きづらくなる気がするがどうだろう。Dockerを立ち上げてその中でテストするみたいなことはできるんだろうか。

たろこふすきーたろこふすきー

ユニットテストを厚くしたいけど、モックを交えたテストを書くハードルって若干高いなって感じた。

このスクラップは2021/09/17にクローズされました