SlideShare a Scribd company logo
Test Hook
2010年11月14日日曜日
Test Hookとは?
if (TEST){
....
} else {
....
}
2010年11月14日日曜日
• コードは他のクラス等に依存する。
• ユニットテストを部品として保つため
には、その依存性を分離している必要
がある。クラス名の形式がコード中に
ハードコードされていると、そのよう
な分離は困難になる。
• Test Hookはテスト自動化における、テ
ストのための振る舞いを導入するため
の最終手段。
2010年11月14日日曜日
 How it Works
• SUTがテストのための振る舞いをサポー
トするために、SUTやDOCに直接の
フックを導入する。
• これはある種のtesting flagを使用し、必
要な箇所でチェックすることによって
実装される。
2010年11月14日日曜日
When to Use It
• 時として、このような最終手段を取る
ことができる。それは、Dependency
LookupやDependency Injectionのような
方法が取れない場合。
• 依存性のハードコードに端を発する、
「テストされないコードに対応するた
めに、Test Hookを使用する。
2010年11月14日日曜日
• Test Hookはオブジェクトや、関数ポイ
ンタなどの動的バインディングをサ
ポートしない言語でTest Doubleの動き
を導入するためだけの方法ではない。
2010年11月14日日曜日
• Test Hookはレガシコードをテストの傘
に置くときにも使うことができる。
• リファクタリング中にTest Hookを使う
ことによってテスタビリティを確保
し、テストをセーフティーネットとす
ると、さらにtestabilityを向上できる
• ある段階に達したら、私たちを保護す
るモダンなテストが十分用意できた
ら、それまで必要だったTest Hookを取
り除くことができます。2010年11月14日日曜日
• Test Hookのエッセンスは、テストした
いSUTにコードを挿入すること
• 本体のオブジェクトの代わりにTest Doubleをコントロー
ルする処理に回すか
• リアルのオブジェクトにTest Doubleを配置する
• プロダクションでは、本体オブジェクトに以上するtest-
specific Decoratorを配置する。
Implementation Notes
2010年11月14日日曜日
• テスト中であることを指すフラグは、コンパイル時の定数
が使われ、コンパイラによって、テスト用のロジックは最
適化されることになる。
• プリプロセッサやコンパイラのマクロをサポートする言語
では、コードがproducion phaseに入った時に、Test Hookを
取り除くことができる。フラグは設定用のデータやグロー
バル変数から参照することができる。
2010年11月14日日曜日
• SUTが返す現在日時に依存するため、
midnightの時だけ通る
• SUTが時間を受け取るクラスをハード
コードしているため、DOCをTest
Double によって置き換えることができ
ない。
Motivating Example
2010年11月14日日曜日
• 可能であるなら、testing flagをグローバル変数として導入す
ることにする。
• このやり方はテストであることを示すために、ビルドのス
テップで分離することが必要になる。
• この方法は設定のパラメータや、メンバー変数を使う場合
に比べて、コンパイラによる最適化を効かすことができる
ため、より安全です。
2010年11月14日日曜日

More Related Content

PDF
Effective Java 輪読会 第7章 項目41-42
PDF
『JUnit実践入門』写経・実践会 in 横浜 #2
PDF
Mr201307 investigation into_emet4.0_jpn
PDF
20100925xutp
PDF
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
PDF
圏論のモナドとHaskellのモナド
PDF
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
PDF
「TDDはじめて物語」 #tddbc
Effective Java 輪読会 第7章 項目41-42
『JUnit実践入門』写経・実践会 in 横浜 #2
Mr201307 investigation into_emet4.0_jpn
20100925xutp
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
圏論のモナドとHaskellのモナド
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
「TDDはじめて物語」 #tddbc

More from Hiroyuki Ohnaka (20)

PDF
remote Docker over SSHが熱い
PDF
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
PDF
Remote Development with Visual Studio Code & A clean dev env, working every ...
PDF
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
PDF
「WindowsデスクトップでWeb開発 改訂版」サンプル
PDF
Mackerelの薄い本
PDF
Microsoft DocsにContributeした話
PDF
Azure functions+typescript
PDF
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
PDF
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
PDF
仮想通貨始めました~GethではじめるEthereum~
PDF
錬金術MeetUpへのお誘い
PDF
Mackerelではじめる お手軽サーバー監視
PDF
「GebとSpockではじめるシステムテスト自動化」
PDF
TDDはじめて物語Second Season(updated)
PDF
TDDはじめて物語 Second Season #tddbc
PDF
XP祭り2017 LT 「DevOps再考」(改題)
PDF
JDK9の真の目玉機能はこれだ!
PDF
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
PDF
「すいーとみゅーじっく」のできるまで
remote Docker over SSHが熱い
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
Remote Development with Visual Studio Code & A clean dev env, working every ...
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
「WindowsデスクトップでWeb開発 改訂版」サンプル
Mackerelの薄い本
Microsoft DocsにContributeした話
Azure functions+typescript
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
仮想通貨始めました~GethではじめるEthereum~
錬金術MeetUpへのお誘い
Mackerelではじめる お手軽サーバー監視
「GebとSpockではじめるシステムテスト自動化」
TDDはじめて物語Second Season(updated)
TDDはじめて物語 Second Season #tddbc
XP祭り2017 LT 「DevOps再考」(改題)
JDK9の真の目玉機能はこれだ!
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
「すいーとみゅーじっく」のできるまで
Ad

20101114