ロンドン学派とデトロイト学派
「単体テスト」と呼んだときの「単体」は、1単位の振る舞いのことを指す
「a unit of behavior」を検証する
プログラムの都合ではなく、ビジネス視点・現実世界の粒度に合わせてtest caseを作る
関数単体をテストするのではなく、想定されるシナリオをテストする感じ
個々のtest caseを独立に作る
個々のtest caseの中では複数のclassが現れることも多い
test doubleの使用に消極的
1つのtest caseで1つの対象のみをテストする
「単体テスト」と呼んだときの「単体」は1単位のコードのことを指す
e.g. 1つのclass
「a unit of code」を検証する
不変依存を除く全ての依存をtest doubleに置き換える 例えば、テスト対象のclass Aが、class Bに依存してるならBのtest doubleを用意する
積極的にtest doubleを使う
そうすることで、SUTを、他のものから完全に隔離できる
複雑に絡み合った依存関係を持つ対象のtestを行いやすい
testが実装の詳細を知りすぎてしまいがち
参考
この章まるまるこの2つの学派の違いを説明している
/mrsekut-book-4839981728/061.icon
2つの学派でmockする対象が異なることがパット見でわかる図
ロンドン学派は、test doubleを使ったtestのことをintegration testだとみなす
だから、デトロイト学派が書いた単体テストの多くは、
ロンドン学派から見ればintegration testということになる
個々のtest caseが独立なのは両者とも同じでは?mrsekut.icon
mockを使ったからと言って状態を共有するわけじゃなかろう
この分類ってなんなんだ?
どうせOOPの文脈だけの話でしょ?という気がしているがどうなんだろうmrsekut.icon
@t_wada: テスト駆動開発にはざっくりいうとモックを積極的に使う派(ロンドン学派)とあまり使わない派(デトロイト学派、古典派)がありまして、私は後者なのでほとんど使わず、このエントリに深く同意するところです / “モックは必要悪で、しないにこしたことはない - …” https://t.co/VjDvospTKu https://gyazo.com/9758b661ab62f872033cd3a6f8ae0bfc https://martinfowler.com/articles/2021-test-shapes.html
右がmock
Intertwined with this distinction are the growth of two schools of XP unit testing practice, which I call classic and mockist. Classic XP unit testing follows the sociable approach we originally used, while mockist style favors solitary tests. ref XPのunit testの実践には2つの流派がある