これであなたもテスト駆動開発マスター!?和田卓人さんがテスト駆動開発問題を解答コード使いながら解説します~現在時刻が関わるテストから、テスト容易性設計を学ぶ #tdd|CodeIQ MAGAZINE を読んだ。
最後のまとめだけ引用するけど、これはTDDでは(というか和田さんが各所で)ずっと言われてることだし、それよりアプローチのメリット/デメリットについて何回でも読むべき。
* 良いユニットテストは Repeatable (繰り返し可能、再現可能) * テストダブルを使いこなす * 外部環境との界面にインターフェイスを作成し、テストダブルで置き換える * 良いユニットテストは独立 (Independent) していなければならない * 後始末を忘れずに行い、テストを独立させる * static を避け、テストメソッド間の依存関係を断つ * Assertion Roulette に注意する * 目指すのは「テストメソッド毎にアサーションひとつ」(しかし、やりすぎは禁物) * カスタムアサーションを使う * パラメタライズドテスト(Parameterized Test)を使いこなす * Fragile Test (脆いテスト) に注意する * テストだけに使う部分の可視性を下げる * private メソッドを扱いたくなったら要注意 * テストを設計ツールとして使う * テストコードのノイズを減らす * 日本語テストメソッドを試してみる * シンプルなコードとテスト失敗時の情報のバランスを考える