Konboi Note

テスト用のデータをどう用意するか

· Konboi

ここでのテストは主にユニットテストを想定しています。

はじめに

以前、同僚とペアプロしている時にテストデータをどう用意するかで盛り上がったでのその時の事を整理、メモしてみる。

ここで挙げる方法以外にもあるかもしれないが、そこで上がったのは以下の3つ。

  • 予めテストデータ(e.g csv)を用意しておいてテストで必要なデータを読み込む
  • テスト内で生成する
  • テストで使うデータを各テスト毎に SQL ファイルを用意して生成する

それぞれ Pros/Cons をざっと考えてみた

予めテストデータ(e.g csv)を用意しておいてテストで必要なデータを読み込む

Pros

  • 再利用性が高い
  • 量が必要な場合でも読み込むだけ
  • テストコード生成用のコードが読み込むだけで済む

Cons

  • メンテナンスが面倒
    • カラムが追加された場合など
    • 既存のデータを更新すると別のテストケースに影響が出たり
  • テストコードにマジックナンバー(e.g ID: 1 など) が出てくる

テスト内で生成する

Pros

  • テスト内でどのデータを使っているかがわかりやすい
  • 他のテストへの影響が少ない

Cons

  • テストに必要なデータ生成部分のコードが長くなりがち
    • メインのテストコードよりも長くなることも…
  • 再利用性が低く、他のテストコードで使えない
    • コピペするしかない…?

テストで使うデータを各テスト毎にSQLファイルを用意して生成する

Pros

  • 他のテストへの影響が少ない
  • テストコード生成時に実行するだけなのでテストデータ生成用のコードが少なくすむ

Cons

  • テストコード上にマジックナンバー(e.g ID: 1 など) が出てくる
  • テスト時にテストコードと生成用のファイルとを行き来する必要がある

さいごに

個人的な意見としては、マジックナンバーとかでこの ID に何か意味があるのかな…?とかを考えたくないので多少冗長だとしてもテスト内でテストデータを用意する方が好き。
過去のプロジェクトではテストデータを生成しやすくるユーティリティーメソッドを用意したりして凌いでいた気がする。

何がいい/わるいとかはなくて、テスト対象だったりデータの変更頻度だったりで用途にあったように準備すればいいと思う。