Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Design, Quality, Testing > jUnit. Событие завершения всех тестов


Автор: Stifler 23.4.2010, 00:17
Здравствуйте!
Запускаю тесты maven'ом. Мне необходимо отловить момент, когда все тесты завершены (как бы они завершены не были). В RunListener'е есть метод testRunFinished, который должен срабатывать, когда все тесты из класса завершены. Но если используется несколько классов с тестами (переменное кол-во. какие именно тесты запускать указывается в pom-файле), то надо бы отловить момент, когда закончится последний. Не подскажите, каким образом это можно сделать?

Автор: Stifler 24.4.2010, 12:15
Попытался сделать так:

Мой test runner
Код

public class MySuite  extends Suite { 

    private final TestsRunListener myRunListener;

    public MySuite(final Class<?> klass, final RunnerBuilder builder) throws InitializationError {
        super(klass, builder);
        myRunListener = new TestsRunListener();
    }

  protected MySuite(final Class<?> klass, final Class<?>[] suiteClasses) throws InitializationError {
        super(klass, suiteClasses);
        myRunListener = new TestsRunListener();
    }

  @Override
    public void run(final RunNotifier rn) {
     rn.addListener(myRunListener);
     super.run(rn);
    }


}


Listener для отлова события завершения теста
Код

public class TestsRunListener extends RunListener {

    @Override
    public void testRunFinished(final Result result) throws Exception {
        LOGGER.debug("TEST RUN FINISHED");
        super.testRunFinished(result);
    }

    @Override
    public void testFinished(final Description description) throws Exception {
        LOGGER.debug("TEST FINISHED");
        super.testFinished(description);
    }

}


И сама suite, где Test1 и Test2 классы с тестами
Код

@RunWith(MySuite.class)
@SuiteClasses({Test1.class, Test2.class})
public class AllTests {

}


Запуская тесты maven'ом: mvn clean -D test=AllTests test, получаю неожиданный для меня результат.
В логе есть строки "TEST FINISHED", но ни одной строчки "TEST RUN FINISHED". Не определяется завершение запуска suite.

Автор: Stifler 29.4.2010, 16:51
В общем, RunListener как-то не помог. Зато в MySuite в методе run можно сделать так:
Код

public class MySuite extends Suite {

    private final TestsRunListener myRunListener;
     
    //...

  @Override
    public void run(final RunNotifier rn) {
     rn.addListener(myRunListener);
     super.run(rn);
     LOGGER.info("ALL TESTS FINISHED");
    }
}


Всё, что мне необходимо я сделал после super.run(). Вроде бы пока работает, не знаю, может какие в последствие косяки вылезут...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)