最初の問題は、Test3はは@RunWith(Suite.class)
を使用しますが、@Suite.SuiteClasses({Test3.class, .....})
が含まれていないということです。これにより、IntializationError: class 'Test3' must have a SuiteClasses annotation
が生成されます。 Test3の下にクラスがあることを意図していないので、この注釈は削除する必要があります。
Exception: No runnable methods
という2番目の問題は、ほとんどの場合、@Test
をテストに追加することを忘れているためです。あなたはあなたのサンプルにテストを入れなかったので、実際にそうであるかどうかはわかりませんが、それが最も原因です。
次のテストは、任意のクラスから実行することを可能にするあなたのコードの作業バージョンです:
Test1.java
import org.junit.runner.*;
import org.junit.runners.*;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({Test2.class})
public class Test1 {
}
Test2.java
import org.junit.runner.*;
import org.junit.runners.*;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({Test3.class})
public class Test2 {
}
Test3.java
import static org.junit.Assert.*;
import org.junit.*;
public class Test3 {
@Test
public void testTrue(){
assertTrue(true);
}
}
物事を整理するよりも良い方法があるかどうかは、クラスの作成方法によります。スイートにスイートを追加することができるので、これが示すように、ツリーのようなすべてに依存する小さなスイートのスイートを作成できます。たとえば、私が一般的に行っているのは次のとおりです。
AllTestSuite
TextParsingSuite
GuiSuite
SwingSuite
JavaFXSuite
FileIOSuite
最も関連性の高いスイートにテストが追加されます。結局、私は10以上のテストクラス/スイートを持つスイートはないと思います。私がしたら、新しいサブスイートを作る時です。言い換えれば、「膨大なリストのどこか」、効果的に一つの大きなリストを作るために別のリストに組み合わされ小さいリストのちょうど多くはありません。
テストを含むJavaクラスをすべて動的に見つけることができると思いますが、JUnit自体はこの動作をサポートしていません(私が個人的には良いことだと思うテストしか実行しません)。
すべてのTest3で@RunWith(Suite.class)を削除し、見つからない注釈を追加するとTest2sの1つですべての問題が修正されました。しかし、これはそれを行うための最良の方法とは思われません。特定のディレクトリの下ですべてのテストを実行するより良い方法はありますか? – Spyder