SlideShare a Scribd company logo
1 of 11
Download to read offline
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

More from Hiroyuki Ohnaka

More from Hiroyuki Ohnaka (20)

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

20101114