Я создал собственный бегун, расширив Suite
:
public class MyRunner extends Suite {
public MyRunner(Class<?> klass, RunnerBuilder builder) throws InitializationError {
super(klass, builder);
}
@Override
public void run(RunNotifier notifier) {
notifier.addListener(new MyRunListener());
notifier.fireTestRunStarted(getDescription());
super.run(notifier);
}
}
Как видно из run
, это регистрирует MyRunListener
, который выглядит следующим образом:
class MyRunListener extends RunListener {
@Override
public void testRunStarted(Description description) {
System.err.println("1: run started");
}
@Override
public void testStarted(Description description) {
System.err.println("2: test started");
}
@Override
public void testFinished(Description description) {
System.err.println("3: test finished");
}
@Override
public void testRunFinished(Result result) {
System.err.println("4: run finished");
}
}
Я добавил 1:
, 2:
, 3:
и 4:
в соответствии с порядком, в котором я ожидаю вызова этих методов.
Затем я создал набор тестов, который выглядитследующим образом:
@RunWith(MyRunner.class)
@Suite.SuiteClasses({ MyTest.class })
public class MyTestSuite {
}
И следующий тест:
public class MyTest {
@BeforeClass
public static void beforeClass() {
System.err.println("A: beforeClass");
}
@Before
public void before() {
System.err.println("B: before");
}
@Test
public void test() {
System.err.println("C: Running actual test...");
}
@After
public void after() {
System.err.println("D: after");
}
@AfterClass
public static void afterClass() {
System.err.println("E: afterClass");
}
}
Опять вывод, помеченный в соответствии с порядком, который я ожидаю.
Вот вывод, который я получаю, когда язапустить MyTestSuite
через IntelliJ (в качестве конфигурации запуска JUnit):
2: test started
B: before
C: Running actual test...
D: after
3: test finished
E: afterClass
4: run finished
1: run started
A: beforeClass
С какой стати я получаю этот порядок вывода? Я, должно быть, что-то очень неправильно делаю в своем бегуне,но я только что реализовал это в соответствии с учебниками в Интернете. (Использование JUnit 4.12)