20101114 An intracellular glucose biosensor based on nanoflake ZnO
20101114
-
Upload
hiroyuki-ohnaka -
Category
Documents
-
view
641 -
download
1
Transcript of 20101114
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日日曜日