Upload
hiroyuki-ohnaka
View
740
Download
3
Tags:
Embed Size (px)
Citation preview
In-line Teardown
2010年7月24日土曜日
• 反復可能で、堅牢なテストは(ry
• ファイルをオープンしたりコネクションを使用するだけでなく、残り物のオブジェクトやデータベースのオブジェクトは、うまくいけば効果的に後片付けできるが、最悪の場合はテストが失敗したりシステムがクラッシュしたりします。
2010年7月24日土曜日
• 一部のオブジェクトはgc によって掃除することができますが、自分でTear
down しないと残ってしまうオブジェクトもある。
2010年7月24日土曜日
• すべてのオブジェクトが自動的にクリーンアップされるわけではないということに留意する必要がある。
• SUTを動かして結果を検証したあとで、
終了後にGC によって回収されなかったオブジェクトを解放する必要がある。
2010年7月24日土曜日
• teardown のロジックがテストの結果に寄らず実行されることを保証する機能に関連した言語を使うことができる。
2010年7月24日土曜日
• いくつかの形式のteardownロジックを使用することができる。
• テストごとに解放する必要があるオブジェクトが違う場合に、In-line Teardown
を使用することができる。
When to Use it
2010年7月24日土曜日
• Unrepeatable Tests や Slow Tests の原因となることを避けるために、どのオブジェクトをクリーンアップする必要があるかを特定する必要がある。
2010年7月24日土曜日
• Fixture のセットアップとはちがって、teardownのロジックはTests as
Documentationの観点からは重要ではない。
• teardownのロジックはどんな形式であれ、High Test Maintenance Costの要因となるので、可能なかぎりさけるべき
2010年7月24日土曜日
• 唯一の利点は、teardown logicのメンテナンスが容易になることによってもたらされる。
• Testcase Class per Fixture を使用しているなら、Automated Teardown (page 503)
や use Implicit Teardown (page 516) を使うよう努力するのがよい
2010年7月24日土曜日
• Implict Teardownを導入するための飛び石としてIn line Teardownを使用することができる。
• その結果として「可能な限り簡単に」という原則に従うことができる。
2010年7月24日土曜日
• 次に、テストの中で共通するロジックを抽出します。
• オブジェクトが自動メモリ管理の下にある場合はin-line Teardownは使用するべきではない。
• そのようなケースでは、エラーを避け、テストをわかりやすく、メンテナンスしやすくするためにGarbage-
Collected Teardown を使用するべき2010年7月24日土曜日
• 考慮すべきなのは、テストがAssertion
Method によって失敗したか、SUTないしTest Methodのバグによってエラーで終了した場合に、teardownの実行を保証されるということ。
• 次に考慮すべきなのは、tear down のコードが新たなエラーを生み出さないと言うこと。
Implementation Notes
2010年7月24日土曜日
• In-line Teardownを正しく動かすための鍵は、teardownが走ることを保証するために、言語レベルの構造を使用すること。
• 最近の言語では例外のハンドリング構造機構を備えている。(Javaにおけるfinallyブロックなど)。
2010年7月24日土曜日
• teardownしようとしたリソースが存在しない場合にエラーと鳴るのを避けるためには、ロジックのそこらじゅうにguard節をうめこむ。
• このことによりエラーの減少が見込まれます。(保証はできないってことね^^;)
Variation: Teardown Guard Clause
2010年7月24日土曜日
Variation: Delegated Teardown
• teardownのロジックをTest Methodから追い出してTest Utility Methodに移動する。
• teardownのロジックがテストを攪乱することは避けらるが、アサーションやSUTとのエクササイズの中で実行されることを保証しなければいけません。よってImplict Teardownを使うのがよい
2010年7月24日土曜日
Variation: Naive In-line Teardown
• Naive In-line Teardown とはtry/finallyblock
を埋め込んで、teardownロジックが常に実行されることを保証するのを忘れた場合のパターン。
2010年7月24日土曜日
Refactoring Notes
• In-line Teardown
• Teardown Guard Clause
• Multiresource In-line Teardown (Java)
• Delegated Teardown
2010年7月24日土曜日