Как я Динамично создаю Набор тестов в JUnit 4?

Я хотел бы создать junit набор тестов с помощью JUnit 4, где названия тестовых классов, которые будут включены, не известны, пока набор тестов не выполняется.

В JUnit 3 я мог сделать это:

public final class MasterTester extends TestCase
{
  /**
   * Used by junit to specify what TestCases to run.
   * 
   * @return a suite containing what TestCases to run
   */
  public static TestSuite suite() {
    TestSuite suite = new TestSuite();

    for(Class klass : gatherTestClasses()) {
      suite.addTestSuite(klass);
    }

    return suite;
  }
}

и позвольте gatherTestClasses() соглашение о методе с выяснением, что тестовые классы работать.

В JUnit 4 в документации говорится для использования аннотации: @SuiteClasses({TestClass1.class, TestClass2.class...}) создавать мой набор тестов. Там являются многочисленными ТАК ответы, показывающие, как сделать это. К сожалению, примеры, которые я вижу, кажется, не допускают передачу динамично сгенерированного списка TestClasses.

Это ТАК отвечает, предложил, чтобы я должен был разделить на подклассы BlockJUnit4ClassRunner который я не хочу делать.

Динамично указанные наборы тестов походят на что-то, что должно быть в JUnit 4 где-нибудь. Кто-либо знает где?

51
задан Community 23 May 2017 в 01:54
поделиться

2 ответа

Я нашел набор Classpath весьма полезным при использовании с соглашением об именах в моих тестовых классах.

https://github.com/takari/takari-cpsuite

Вот пример:

import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.runner.RunWith;

@RunWith(ClasspathSuite.class)
@ClassnameFilters({".*UnitTest"})
public class MySuite {
}
25
ответ дан 7 November 2019 в 10:05
поделиться

Я не уверен, что делает gatherTestClasses (), но допустим, что он возвращает некоторые тесты, когда ОС Linux и разные тесты, когда ОС Windows. Вы можете воспроизвести это в JUnit 4.4 с предположениями :

@Test
public void onlyOnLinux() {
    assumeThat(getOS(), is(OperatingSystem.LINUX));
    // rest of test
}

@Test
public void onlyOnWindows() {
    assumeThat(getOS(), is(OperatingSystem.WINDOWS));
    // rest of test
}

@Test
public void anyOperatingSystem() {
    // just don't call assumeThat(..)
}

Реализация getOS () и OperatingSystem является вашим пользовательским кодом.

6
ответ дан 7 November 2019 в 10:05
поделиться
Другие вопросы по тегам:

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