Skip to content

Instantly share code, notes, and snippets.

@tokubass
Created February 27, 2021 16:11
Show Gist options
  • Save tokubass/579b2773caabf6f0f1ce53b7fb1947da to your computer and use it in GitHub Desktop.
Save tokubass/579b2773caabf6f0f1ce53b7fb1947da to your computer and use it in GitHub Desktop.

なぜランダム値を使うのか

csvなどで固定環境を再現することで生産性をあげられるのはプロジェクト初期のみだから。

詳細理由

テスト結果がcsvに依存する

  • 事前に3人のuserをcsvで作成している場合、userを追加するテストで合計4人になったら成功というテストが書かれるとcsvに4人目のuserを定義するとテストが落ちる

csvの拡張と管理に限界がくる

  • 各種テストの事情により拡張されて身動きがとれなくなる
    • テストケースが依存しているカラムがどれかわからない。ランダム値かつテストケース毎に必要な分だけテストコード側から固定値を指定することで、そのテストケースが何を確認したいのかが理解しやすくなる。
  • 拡張されすぎないようにcsvを複数作成してテストで使い分ける対策が取られるが、複数csvの責務の境界線管理は難しく、かつ複数作っても必要としている柔軟性には及ばない

落ちるべきテストで成功する

  • 固定値には"1"など単純な値が指定されることが多く、アプリケーションのバグに気づかない

確実に元の状態にcleanupするのが難しい

  • csvだけでなくテスト実行により書き込まれたデータも消す必要がある

ランダム値の衝突について

ランダムなのでテストケースが増えてくるとpkが衝突することもある。その場合は失敗したテストだけ再実行する仕組みをCIに入れると良い。 IDの採番を中央管理してpk衝突を防止できるが、まずは分散テストの分散数を増やしてテスト実行時間を減らしつつ、pkが被りにくいようするほうが目先の利益がある。 ID採番がしたくなればランダム生成しているコード部分に手を加えればいいだけなので、あとから採用するのは難しくない。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment