JunitでInitializationError出てハマった話

Windows + Eclipse + Springboot1.4.3 + Junit4で単体テストを作ってるときにテストケースを追加したら、今まで動いていたJunitのテストがInitializationErrorで落ちてしまう状況に遭遇した話。

※ここを見ても解消しなかった場合はこちらの記事にも参考になるかと

結論としては@Testを付けたメソッドをテストメソッド内で呼び出すと起きるぽい


// ざっくりこんな感じ
public class HogeTestClass(){

  @Test
  public void hogeMethod1(){
  }

  @Test
  public void hogeMethod2(){
    hogeMethod1();
  }

}

まぁ、よく考えると@Test付けてんのにネストさせるのも確かにおかしいなと反省。

危うく一日つぶすところだった。。。

以下、解決までの経緯を書いておきます。

EclipseでJunitのメソッド右クリックでテスト実行するとInitializationErrorが出る。

スタックトレースに「No runnable method」とか書いてあって、Exception投げてあるところのメッセージ見てみる。

  • テストクラス名
  • メソッド名

上記ともに合ってるのに何でじゃい!って、google先生に聞いても

テストメソッドはprivateじゃなくてpublicで宣言しないとハハハ

Junitのバージョンがよろしくなかったからpomでバージョン指定したヒヒヒ

test*, *Test, *TestCaseじゃないとメソッド認識しないよーフフフ ※Junit3

@Ignore取り忘れているんじゃないかい?へへへ

Eclipse cleanしてプロジェクト読み込みなおせばホホホ

どれも回復せず orz

途中でbitbucketの認証が変になるし。。。

とりあえず気持ちを落ち着かせて、別のテストクラスのテストを実行してみると実行できた。

ということはこのテストクラスに原因がありそうなので、メソッド追加前の元の状態に戻して段階的に実装&テスト実行していきInitializationErrorとなったタイミングを探る。

メンバ変数追加や@Autowireしたタイミングではまだ実行可能。

メソッドの中身を記載したタイミングで起きるようになったことを確認。

呼び出すメソッドの@Testを外して実行してみる。

OK !!

ちゃんTDDの癖付けてテスト作るの慣れておかないとな。。。