Как я могу запустить пользовательский JUnit4 Runner на тестовых классах JUnit3 с Ant? - PullRequest
8 голосов
/ 20 апреля 2011

У нас есть тестовые классы, построенные на SpringTT 2.0.8 AbstractTransactionalDataSourceSpringContextTests. Их огромное количество, все они написаны в стиле JUnit3.

Чтобы использовать фильтрацию JUnit 4, мы создали заменяющий JUnit38Runner, который позволяет сопоставить эти тесты с конкретной средой приложения и соответствующим образом отфильтровать их.

Весь набор тестов отлично работает за пределами Ant, используя аннотацию @RunWith в нашем пользовательском JUnit38Runner.

Однако, когда мы пытаемся запустить в Ant, он заставляет отдельные тесты запускаться либо как junit.framework.TestSuite, либо в виде JUnit4TestAdapter, оба из которых игнорируют аннотации @RunWith в JUnit4. Что еще хуже, наши существующие наборы явно переопределены Ant, который вызывает методы suite () напрямую, а не делегирует JUnit.

Я попытался выйти из Ant JUnitTestRunner и просто переопределить метод run (), однако класс просто не написан для расширения.

Помимо копирования всего JUnitTestRunner и его взлома (который откроет нам проблемы с хрупким кодом), кому-нибудь повезло с другими подходами к решению этой проблемы?

1 Ответ

0 голосов
/ 17 февраля 2012

У нас была похожая проблема, и хотя она не так чиста, как запуск задачи junit, ее не очень сложно решить. Мы создали класс с main (), который просто вызывает Junit4Runner. Он добавляет RunListener, который пытается записать вывод отчета junit в XML. Идея заключалась в том, что формат данных гораздо менее вероятен, чем бегун, поэтому он менее хрупок.

Я вычеркнул изрядное количество кода для конкретной среды, но это основная идея. Наша test цель в муравье выглядит так:

    <java failonerror="yes"
          fork="true"
          classname="com.mycompany.test.Junit4Runner">
        <classpath>
            <pathelement location="${basedir}/bin" />
            <pathelement path="${ProjectTest.classpath}" />
            <!-- above classpath includes junit-4.8.1.jar -->
        </classpath>
        <arg value="${test.class}" />
    </java>

Вы можете просмотреть код для класса бегуна здесь . Он не зависит ни от чего, кроме Java 6 SE и Junit 4.8, и может быть совместим с Java 5 SE.

...