Hard-to-Test Code

テストが書きにくい場合の例1

あるテスト対象オブジェクト(ドメイン)に不純物が混ざっている場合。時間の概念に関するもの、IO系と連携に関するもの、(外部)システムとの連携に関するもの、などなどが混在していると、テストを書くのが難しく傾向になる。テストを書こうとしてつまずいた際に、「なぜテストを書くのが難しいのか?」に思考を巡らし、テスト対象オブジェクトから不純物を取り除く活動が必要である。

テストが書きにくい場合の例2

テスト対象オブジェクトが、周りとおしゃべりしすぎている場合。テスト対象オブジェクトの前提条件のセットアップが大変である。テストを書こうとしてつまずいた際に、「なぜテストを書くのが難しいのか?」について思考を巡らし、オブジェクト間の関係を清算するする活動が必要。

テストが書きにくい場合の例3

キー概念となるバリューオブジェクトを発見できていない。サービスやエンティティやヘルパーにのっぺりと実装してしまっている。バリューオブジェクトのメソッドとサービスやエンティティのメソッドを比べ、バリューオブジェクトのメソッドの方がテストしやすい傾向がある。コアとなる振る舞いを、エンティティやサービスからバリューオブジェクトへ追い込む純化はバリューオブジェクト指向プログラミングの醍醐味の1つ。

Growing Object-Oriented Software, Guided by Tests (Addison-Wesley Signature Series (Beck))

Growing Object-Oriented Software, Guided by Tests (Addison-Wesley Signature Series (Beck))

xUnit Test Patterns: Refactoring Test Code (Addison-Wesley Signature Series (Fowler))

xUnit Test Patterns: Refactoring Test Code (Addison-Wesley Signature Series (Fowler))