日々常々

ふつうのプログラマがあたりまえにしたいこと。

GradleでEnclosedのテストが二回実行されるんだ

特に理由はないんですけどGradle良い気がするので手を出そうと思い始めて盛り上がって下がってを繰り返してる今日この頃です。今日この頃が数ヶ月続いてますけど大丈夫です。

で、まー、JavaなアレをGradleでアレしてるわけなんですけど、ふつーにEnclosedなテストを書いたらなんか変。

import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import org.junit.Test;

@RunWith(Enclosed.class)
public class EnclosedTest {

  public static class NestedTest {
    @Test
    public void Enclosedのテスト() {
    }
  }
}

これを gradle test したら、こーなってた。

何故か二回実行されてます。

テスト対象として、コンパイル後の *.class ファイルでも見てんじゃないかなと予想。excludesで $ 含むのを避ければいい気がしたので、sourceSet.test.java.exclude に書いてみようと思ったんだけど、これはコンパイル対象だからダメ。どっか他に書ける場所あるかなー。コードは今度読む。


そんな訳で、現状のGradleさん(1.0-rc-3)のjavaプラグインさんのテスト状況。

RunWith(Enclosed.class)のん もちろん実行されない
↑にネストされたクラスのん なんか二回実行される
↑じゃないネストされたクラスのん なぜか実行される
インナークラスを持つクラスのん 普通に実行される
インナークラスのん ちゃんと実行されない

Enclosed経由で実行されて、自身のでまた実行されて、で二回って感じですかね。Enclosedなんていらなかったんや……


Mavenでやると普通にこう。

RunWith(Enclosed.class)のん 実行されない
↑にネストされたクラスのん 実行される
↑じゃないネストされたクラスのん 実行されない
インナークラスを持つクラスのん 実行される
インナークラスのん 実行されない


なんか手はあるんだろうけど、普通に使えてくれないとなぁ……。JIRAは Enclosed で検索してもでてこなかた。コードは今度読む*1
http://issues.gradle.org/browse/GRADLE

      • -

(2012/08/08 追記)
sourceSet.test.java.exclude じゃなく test.exclude でいけるよーです。 @shuji_w6e さんありがとうございます!
http://d.hatena.ne.jp/shuji_w6e/20120808/1344386399

*1:大事なことなので二回