Java | 早期リターン(ガード節)のメリットと注意点

Java Java
スポンサーリンク

モック・スタブ・フェイクのアンチパターン(やってはいけない使い方)

テスト効率化のためにモック・スタブ・フェイクを使うのは有効ですが、誤った使い方(アンチパターン)をすると逆にテストが壊れやすくなり、保守性も落ちます。ここでは代表的なアンチパターンを整理します。


アンチパターン一覧

1. モックの乱用

  • 問題: すべての依存をモック化してしまうと「呼び出し確認」ばかりになり、テストが業務ロジックの正しさを保証しなくなる。
  • 例: 「DB.save() が呼ばれたか」だけを確認して、保存結果を検証しない。
  • 改善: モックは「呼び出し検証」に限定し、結果の検証はスタブやフェイクで行う。

2. スタブの過剰利用

  • 問題: 常に固定値を返すスタブを使うと、異常系や例外ケースをテストできない。
  • 例: 「APIは必ずユーザーを返す」スタブしか用意せず、エラーケースを再現できない。
  • 改善: スタブに「異常系の戻り値」や「例外を投げる」バリエーションを用意する。

3. フェイクを本番に近づけすぎる

  • 問題: フェイクを複雑に作り込みすぎると、結局「もう一つの本番システム」を作ってしまう。
  • 例: メモリDBフェイクに複雑なクエリ機能を追加して、本物のDBと同じように振る舞わせる。
  • 改善: フェイクは「簡易的な代替」に留める。複雑な挙動は統合テストやE2Eで確認する。

4. テストごとに依存の種類がバラバラ

  • 問題: ユニットテストでフェイクを使ったり、統合テストでモックを使ったりすると、テストの目的が曖昧になる。
  • 改善:
    • ユニットテスト → モック/スタブ
    • 統合テスト → フェイク
    • E2Eテスト → 本物の依存
      という役割分担を守る。

5. 例外処理をテストしない

  • 問題: モックやスタブを使って「正常系」しかテストせず、例外が発生したときのレスポンスを確認しない。
  • 改善: モックに「例外を投げる」設定を入れて、異常系レスポンスを必ずテストする。

まとめ

  • モック乱用 → 呼び出し確認ばかりになる
  • スタブ過剰利用 → 異常系を再現できない
  • フェイク作り込みすぎ → 本番システムの複製になる
  • 依存の使い分けが曖昧 → テストの目的がぼやける
  • 例外処理未テスト → 本番で落ちるリスク大

✅ 実務では「テストの目的に応じて依存の種類を正しく選ぶ」ことが最も重要です。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました