setup/tearDown処理の共通化

JUnitで、setupの処理とか共通化したいなーって思ったときに、

今までは、親クラス作って共通化してたんだけど、これはJUnitアンチパターンの一つだということを最近知った。

理由は、テスト書く人が意図せずsetup/tearDownをオーバーライドしてしまうから。


共通化したいときは、@Ruleつかえってことらしいです。

setup/tearDownをfinal宣言すれば防げるけど、柔軟性がなくなるので、@Rule使うほうが良さげ。

今理解している@Rule の使い方は、↓の感じ。

  1. Rule用クラスをインスタンス化して、@Ruleアノテーションつける。
  2. 設定するRuleクラスをカスタムで作成するときは、TestRuleインターフェースを実装する。


あと、@RuleはJUnit4.7以降じゃないと使えなかったはず。