The RSpec Book読んだ後に残ってたメモ
リファクタリング
リファクタリングとは、コードの振る舞いを変えずにその設計を変えること。
コードの振る舞いが変わる場合、それはリファクタリングではない何か。
テスト対象
オブジェクトが、何であるかをテストするのは良くなく、何をするかをテストすることが重要。
例えば、RDBMSを使って保存されることではなく、DBに保存されるということが重要。
怪しいコードの特徴
- 1つのメソッドでやることが多い、長い
- 一時変数が多い
- OOPなのに手続き型風
- 同じスコープの複数のメソッドがグループを形成している
テストの手順
Red, Green, Refactorの順に行う。
Redから始まり、器を用意することで例外とエラーを解消し、
次に振る舞いを実装することで論理エラーを解消する。
Refactorは常にGreenを維持するように努力を払いながら行う。
その過程に冗長な実装が記述されることも厭わない。
テストの粒度
オブジェクトの振る舞いという観点でテストを記述できる。RSpecが得意。
別の観点から、アプリケーションの振る舞いという観点でテストを記述できる。Cucumberが得意。
粒度は揃えた方が良いので、この2つの観点を混同させてはいけない。
どのフィーチャーから手を付けるか
ビジネスバリューの点から言えばどれからでも同じであるため、
最もやりやすいものから手を付けるのが正しい。
テストをPending状態にするタイミング
これから変更を行うが、確実に失敗するテストが明確であり、
それらの失敗を新たに発覚する失敗と混同したくない場合。
BDD
BDDは設計手法の1つであり、厳密には本物のアプリをテストしているわけではない。
ただ実行可能なサンプルをつくっているだけ。
BDDの視点
サービス提供者ではなくステークホルダーの視点の振る舞いを説明する。
サービス提供者がステークホルダーに含まれることもある。
TDD
あると良いと思うコードをまず書く。
サンプルが実際にテストするかどうかはそれほど重要ではない。
振る舞いを説明することが重要。
テストの構成要素
- 事前条件
- 入力
- イベント
- 出力
テストの主語
テストを表すメッセージにおいて、主語が誰かというのを明示することは大事。
良い目標
- 完了したことを知るのに十分な情報がある
- 現実的に完了できる
- 期限が付いている
ストーリーの構成要素
- タイトル(識別するため)
- ステークホルダーの望む機能とその理由
- いつ完了になるか分かる基準(前提とイベントと結果)