PHPの写経コードはこちら
感想
テストコードかくのおもしろい。「編集して祈る」日々を送っていたので「保護して変更する」安心感すごい。だいすき。もっといろんなパターンのテスト書けるようになりたい。
忘れずにしたいメモ
テスティングパターン
Mock Objectパターン
準備に手間がかかるリソースに依存したオブジェクトをテストするために、決められた結果を返す偽物のオブジェクトを代わりに作成する。テストファイル内で対象のオブジェクトをオーバーライドするもよし、Mock Objectフレームワーク1を使うもよし。
Self Shuntパターン
オブジェクト(A)がほかのオブジェクト(B)ときちんとやりとりしていることをテストしたいとき、Bの振る舞いをAに移してテストする。インターフェースを作るもよし、ブラックボックスにしてもよし。
Log Stringパターン
正しい順序でメソッド呼び出しが行われていることをテストしたいとき、記録用文字列を作り、メソッド呼び出しのたびにその文字列に追記する。
Crash Test dummyパターン
エラー処理部分のコードをテストするとき、例外を発生させる特別なオブジェクトを使う。try-catchでもよし、アノテーション4を使ってもよし、xUnitに搭載されているメソッド5を使ってもよし。
テストからわかる悪い設計の兆候
前準備に要するコードが長い
テスト対象オブジェクトの準備に100行のコードが必要なのであれば、そのオブジェクトは大きすぎるので分割する方がよい。
前準備コードの重複
共通の前準備コードを配置する場所が見つからないのは、互いに密に関連しあうオブジェクトが多すぎることを示唆している。
テスト実行時間が長い
実行に10分以上かかるテストスイートはよくない。
脆いテスト
思わぬタイミングで失敗するテストは、アプリケーションのどこかが意外な形で他の部分に影響している可能性を示唆している。2つの部分の関係性を断つか、または統合するなどして、離れた箇所からの影響を排除するように設計しなおさなければならない。