JUnitで、setupの処理とか共通化したいなーって思ったときに、
今までは、親クラス作って共通化してたんだけど、これはJUnitアンチパターンの一つだということを最近知った。
理由は、テスト書く人が意図せずsetup/tearDownをオーバーライドしてしまうから。
共通化したいときは、@Ruleつかえってことらしいです。
setup/tearDownをfinal宣言すれば防げるけど、柔軟性がなくなるので、@Rule使うほうが良さげ。
今理解している@Rule の使い方は、↓の感じ。
- Rule用クラスをインスタンス化して、@Ruleアノテーションつける。
- 設定するRuleクラスをカスタムで作成するときは、TestRuleインターフェースを実装する。
あと、@RuleはJUnit4.7以降じゃないと使えなかったはず。