Unit Test

の、デトロイト学派視点の定義
以下の3つの条件を満たすtestのこと
1単位の振る舞いを検証する
実行時間が短い
他のtest caseから隔離されている
参考
戻り値のみを見て検証する
副作用がないことが条件
質が高い、保守しやすい
処理の実行が終わったあとにSUTの状態を検証する
実装の詳細を見がち
普段からFPのノリで書いてるからこれが必要になる状況が見えないな

OOP限定の話な気がする
SUTとDOCの間で行われるコミュニケーションを検証する
DOCはmockになる
もっとも偽陽性に対して脆弱
検証の対象となるコミュニケーションがアプリケーションの境界を超えて行われ、かつ、外部から確認できる副作用を発生させる場合にのみ用いる
保守がし辛い
Integration TestもリファクタすることでUnitに変更できる
mockを使用して共有依存を消す
Unit testには価値がない、という論文の解説
unit test批判というか、TDD批判
理由
TDDの実践者が言及するテストカバレッジ100%には意味が無い
それはそう

バグを取り除く最大の機会はテスト以外のところにある
TDDに問題があるのであって、unit testの問題ではないのでは

ユニットテストにビジネス価値はほとんどない
TDDはプログラムデザインに害を及ぼす
ユニットテストの維持コストは馬鹿にならない
テストがコードのクオリティを上げる訳ではない、上げるのは開発者自身である