cover|150

Highlight


第Ⅲ部の「何をすべきかを表すE2Eを書いて、そのあと最小限の実装を書く」

これ意外とできてないんだよな、最初からレイヤリングしちゃう

フィーチャを足しながらレイヤリング(ポートとアダプタパターン)していく

単一責任の原則に従ってリファクタリングしていく

TDDのサイクル(Red-Green-Refactor)

これにReport(なぜアサーションに失敗したかを読みやすくする)を追加すると今後のメンテナンスのときに役に立つ

Red-Report-Green-Refactor

モックするのは自分が持っている型だけ

自分たち変更できないものをモックしてはならない。

ライブラリをモックしてしまうと、アップデートのたびにふるまいが変わっていないか確認しなければならなくなる。

例えばORMのようなライブラリとやりとりするインターフェイスを作って、そのインターフェイス(アダプタ)をモックする。

実際に永続化できるかは粒度の粗いインテグレーションテストで行う。

インテグレーションテストではアダプタ〜ライブラリをテストする。(ORMであればDBも込みで)

アダプタが何かしらコールバックを受け取る場合はモックして、期待通り呼び出されたことを確認する。

テストのレベル

名称対象環境
単体テストオブジェクト同一プロセス
インテグレーションテストサードパーティとの結合同一プロセス
E2Eテストシステム全体別プロセス

インテグレーションテストではシステム全体を持ち出さずに、自分たちのコードとサードパーティのAPIの結合のみに対象を絞る。

E2Eテスト(受け入れテスト)はテスト実行環境とシステム動作環境は別プロセスで切り離された状態で実行する。本番環境に近い環境だと良い。