Первая проблема заключается в том, что Test3 использует @RunWith(Suite.class)
, но не содержит @Suite.SuiteClasses({Test3.class, .....})
.Это производит IntializationError: class 'Test3' must have a SuiteClasses annotation
.Поскольку вы не собираетесь создавать какие-либо классы под Test3, эту аннотацию следует удалить.
Вторая проблема 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 тестовыми классами / пакетами или около того.Если я это сделаю, пришло время сделать новый суб-пакет.Другими словами, где-то нет «огромного списка», просто множество небольших списков, которые объединены в другой список для эффективного создания одного большого списка.
Я полагаю, вы могли бы использовать какой-то инструмент для динамическогонайдите все классы Java, содержащие тесты, но сам JUnit не поддерживает это поведение (он только запускает тесты, о которых вы говорите, что, на мой взгляд, хорошо).