Playframework 2.0 (Java)で、JUnitのRunWithアノテーションが認識されなかった

備忘録。Playframeworkのバージョンは2.0.3、Javaです。


Playframeworkはフルスタックなフレームワークなので、テスト環境もあらかじめセットアップされています。
testディレクトリ配下に以下のようなJUnit4テストを置いておけば、コマンド一発でテストを走らせることができます。

public class HogeTest {
  @Test
  public void ほげほげテスト(){
    //ほげほげ
  }
}

というわけで、以下の様なテストを書きました。

@RunWith(Enclosed.class)
public class HogeTest {
  
  public static class 初期状態がほげの時 {

    @Test
    public void ほにゃらかテスト(){
      //ほにゃほにゃ
    }
  }
}

…が、実行されません。
test-onlyコマンドでテストクラスをずばりで指定しても「No tests to run」言われます。
で、いろいろ調べてみたところ、Playが採用しているビルドツールであるsbtがJUnitテストを動かすのに利用しているjunit-interfaceというプラグインのバージョンに起因しているっぽいとのこと。

${PLAY_HOME}/framework/project/Build.scala

を見ると、2.0.3時点ではjunit-interfaceのバージョンは0.8が使われていました。
junit-interfaceが@RunWithアノテーションに対応したのは0.9以降だそう。


というわけで、junit-interfaceのバージョンを上げれば対応出来そうだったので
Running JUnit Test Suites with Play 2.0 | Living in a Play
を参考にして、Build.scalaに以下の記述を追加。

val appDependencies = Seq(
  // some dependencies ...
  "com.novocode"  % "junit-interface" % "0.10-M2" // <- これを追加
)


これで無事動くようになりました。めでたしめでたし。

ところで

上記の件とは関係ないんですが

$ play test

でテストを実行すると、テストに失敗しても赤くなってくれないしビルドも成功しちゃう問題があって気持ち悪い。

$ play jacoco:test

で実行するとちゃんと失敗してくれるのだけれど。*1

*1:カバレッジ取得用にjacocoプラグイン入れてます