17
In-line Teardown 2010724日土曜日

In line teardown

Embed Size (px)

Citation preview

Page 1: In line teardown

In-line Teardown

2010年7月24日土曜日

Page 2: In line teardown

• 反復可能で、堅牢なテストは(ry

• ファイルをオープンしたりコネクションを使用するだけでなく、残り物のオブジェクトやデータベースのオブジェクトは、うまくいけば効果的に後片付けできるが、最悪の場合はテストが失敗したりシステムがクラッシュしたりします。

2010年7月24日土曜日

Page 3: In line teardown

• 一部のオブジェクトはgc によって掃除することができますが、自分でTear

down しないと残ってしまうオブジェクトもある。

2010年7月24日土曜日

Page 4: In line teardown

• すべてのオブジェクトが自動的にクリーンアップされるわけではないということに留意する必要がある。

• SUTを動かして結果を検証したあとで、

終了後にGC によって回収されなかったオブジェクトを解放する必要がある。

2010年7月24日土曜日

Page 5: In line teardown

• teardown のロジックがテストの結果に寄らず実行されることを保証する機能に関連した言語を使うことができる。

2010年7月24日土曜日

Page 6: In line teardown

• いくつかの形式のteardownロジックを使用することができる。

• テストごとに解放する必要があるオブジェクトが違う場合に、In-line Teardown

を使用することができる。

When to Use it

2010年7月24日土曜日

Page 7: In line teardown

• Unrepeatable Tests や Slow Tests の原因となることを避けるために、どのオブジェクトをクリーンアップする必要があるかを特定する必要がある。

2010年7月24日土曜日

Page 8: In line teardown

• Fixture のセットアップとはちがって、teardownのロジックはTests as

Documentationの観点からは重要ではない。

• teardownのロジックはどんな形式であれ、High Test Maintenance Costの要因となるので、可能なかぎりさけるべき

2010年7月24日土曜日

Page 9: In line teardown

• 唯一の利点は、teardown logicのメンテナンスが容易になることによってもたらされる。

• Testcase Class per Fixture を使用しているなら、Automated Teardown (page 503)

や use Implicit Teardown (page 516) を使うよう努力するのがよい

2010年7月24日土曜日

Page 10: In line teardown

• Implict Teardownを導入するための飛び石としてIn line Teardownを使用することができる。

• その結果として「可能な限り簡単に」という原則に従うことができる。

2010年7月24日土曜日

Page 11: In line teardown

• 次に、テストの中で共通するロジックを抽出します。

• オブジェクトが自動メモリ管理の下にある場合はin-line Teardownは使用するべきではない。

• そのようなケースでは、エラーを避け、テストをわかりやすく、メンテナンスしやすくするためにGarbage-

Collected Teardown を使用するべき2010年7月24日土曜日

Page 12: In line teardown

• 考慮すべきなのは、テストがAssertion

Method によって失敗したか、SUTないしTest Methodのバグによってエラーで終了した場合に、teardownの実行を保証されるということ。

• 次に考慮すべきなのは、tear down のコードが新たなエラーを生み出さないと言うこと。

Implementation Notes

2010年7月24日土曜日

Page 13: In line teardown

• In-line Teardownを正しく動かすための鍵は、teardownが走ることを保証するために、言語レベルの構造を使用すること。

• 最近の言語では例外のハンドリング構造機構を備えている。(Javaにおけるfinallyブロックなど)。

2010年7月24日土曜日

Page 14: In line teardown

• teardownしようとしたリソースが存在しない場合にエラーと鳴るのを避けるためには、ロジックのそこらじゅうにguard節をうめこむ。

• このことによりエラーの減少が見込まれます。(保証はできないってことね^^;)

Variation: Teardown Guard Clause

2010年7月24日土曜日

Page 15: In line teardown

Variation: Delegated Teardown

• teardownのロジックをTest Methodから追い出してTest Utility Methodに移動する。

• teardownのロジックがテストを攪乱することは避けらるが、アサーションやSUTとのエクササイズの中で実行されることを保証しなければいけません。よってImplict Teardownを使うのがよい

2010年7月24日土曜日

Page 16: In line teardown

Variation: Naive In-line Teardown

• Naive In-line Teardown とはtry/finallyblock

を埋め込んで、teardownロジックが常に実行されることを保証するのを忘れた場合のパターン。

2010年7月24日土曜日

Page 17: In line teardown

Refactoring Notes

• In-line Teardown

• Teardown Guard Clause

• Multiresource In-line Teardown (Java)

• Delegated Teardown

2010年7月24日土曜日