最初の問題は、Test3がを使用しているが@RunWith(Suite.class)
、が含まれていないこと@Suite.SuiteClasses({Test3.class, .....})
です。これにより、が生成されIntializationError: class 'Test3' must have a SuiteClasses annotation
ます。Test3の下にクラスがあることを意図していないので、このアノテーションを削除する必要があります。
の2番目の問題は、Exception: No runnable methods
ほとんどの場合@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を超えるテストクラス/スイートを備えたスイートはないと思います。もしそうなら、それは新しいサブスイートを作る時です。言い換えれば、「どこかに巨大なリスト」はなく、1つの大きなリストを効果的に作成するために、いくつかの小さなリストを組み合わせて別のリストにするだけです。
いくつかのツールを使用して、テストを含むすべてのJavaクラスを動的に見つけることができると思いますが、JUnit自体はこの動作をサポートしていません(個人的には、指示されたテストのみを実行します。これは良いことだと思います)。