Don't Modify the SUT(SUTを変更しない)
1. 原則
テスト中にテスト対象(SUT: System Under Test)のコードを変更してはならない
- テスト対象は不変でなければならない
- テストコードはSUTを呼び出すだけであり、SUTの内部実装に手を加えるべきではない
- 意図的にprivateメソッドの可視性を変更したり、テストのためだけにロジックを追加したりしない
2. 根拠
テストの信頼性確保
- テストの目的は、本番環境で動作するコードを検証することである
- テスト用にSUTを変更すると、本番環境とは異なるコードをテストすることになる
- その結果、テストがパスしても本番環境で問題が発生する可能性がある
3. 指針
テスト容易性の追求
- テストを書き始める前に、テストしやすい設計になっているかを確認する
- テストのためだけにコードを変更するのではなく、設計そのものを改善する
- 例えば、依存関係を注入可能な設計にするなど、テストしやすいようにクラスやメソッドを設計する
4. 注意事項
一時的な変更の誘惑
- デバッグやテストの際に、一時的にコードを変更したくなることがある
- そのような変更はテストの信頼性を損なうため、絶対に避ける
- テストが困難な場合は、テストを諦めるのではなく、SUTの設計を見直すことが重要である