Вопрос по java – Junit SuiteClasses со статическим списком классов

6

SuiteClasses будет отлично работать со списком классов, таких как{Test1.class,Test2.class}, но когда я пытаюсь создать статический список классов, он говорит о несовместимых типах: требуетсяjava.lang.Class<?> но нашелjava.lang.Class<?>[]

Что мне не хватает?

@RunWith(Suite.class)

@Suite.SuiteClasses(TestSuite.classes)
public class TestSuite {

    public static Class<?> [] classes;

    static {
       classes = new Class<?> [1];
       classes[0] = MyTest.class;
    }
}
У вас есть пробел между & lt;? & Gt; а []? Если так, удалите это место. AlbertoPL
Пространство ничего не означает, это тот факт, что он пытается разместить массив там, где он не принадлежит (даже если имена классов перечислены на практике как {M1.class, M2.class}). amischiefr

Ваш Ответ

2   ответа
1

@SuiteClasses является аннотацией класса, определенной в JUnit 4.4 в org.junit.runners.Suite.SuiteClasses. Это позволяет вам определить класс набора, как описано в предыдущем вопросе.

Кстати, документ API JUnit 4.4 содержит существенную опечатку для класса org.junit.runners.Suite (Suite.html).

Использование Suite в качестве раннера позволяет вручную создавать набор, содержащий тесты из многих классов. Это эквивалент JUnit 4 статического теста JUnit 3.8.x.suite() метод. Чтобы использовать это, аннотируйте класс с@RunWith(Suite.class) а также@SuiteClasses(TestClass1.class, ...), Когда вы запустите этот класс, он запустит все тесты во всех классах набора.

@SuiteClasses(TestClass1.class, ...) следует изменить на@Suite.SuiteClasses({TestClass1.class, ...}).

Кто-то предоставил неверную информацию о наборе тестов сборки в JUnit 4.4. Не следуйте этому:

JUnit предоставляет инструменты для определения запускаемого набора и отображения его результатов. Чтобы запустить тесты и увидеть результаты в консоли, выполните:

org.junit.runner.TextListener.run(TestClass1.class, ...);
Ссылка указывает на страницу, на которой нет рекламы, и & # x2026;
21

ннотацию как константу. Даже если вы справитесь с этой проблемой, компилятор отклонит ее. Что вам нужно сделать, это:

@RunWith(Suite.class)

@Suite.SuiteClasses({MyTest.class, MyOtherTest.class})
public static class TestSuite {
}

Обратите внимание на волнистые скобки.

Я уверен, что вы пытаетесь получить динамическое построение списка классов в наборе.

Я представилзапрос чтобы они это допустили, но пока единственный способ сделать это - создать подкласс класса Suite следующим образом:

public class DynamicSuite extends Suite {

    public DynamicSuite(Class<?> setupClass) throws InitializationError {
       super(setupClass, DynamicSuiteBuilder.suite());
    }
}


@RunWith(DynamicSuite.class)
public class DynamicSuiteBuilder {
   public static Class[] suite() {
         //Generate class array here.
   }
}
НаследованиеSuite очень помог мне В отличие от использования@RunWith(AllTests.class) бегун, этот подход также уважает@ClassRules самого набора, а также классов, которые он содержит.
Я попробовал этот подход для реализации setUp и tearDown. Но конструктор DynamicSuite вызывается до @ beforeclass. Есть ли способ @ beforeclass может быть вызван перед конструктором.

Похожие вопросы