Использование JUnit RunListener с Maven - PullRequest
2 голосов
/ 11 февраля 2011

Я хочу использовать свои собственные RunListener в своих модульных тестах. Итак, я создал следующий класс:

public class MyRunListener extends RunListener {

    public MyRunListener() {
        System.out.println("Creation of Run Listener...");
    }

    @Override
    public void testStarted(Description description) throws Exception {
        System.out.println("A Test is going to start");
    }

}

Теперь по моему pom.xml:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <properties>
                    <property>
                        <name>listener</name>
                        <value>my.company.MyRunListener</value>
                    </property>
                </properties>
            </configuration>
        </plugin>

Теперь, когда я запускаю mvn test в моем проекте, вывод будет следующим:

Creation of Run Listener...

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running xxx.SomeNewTests
        Test New #1
        Test New #2
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.109 sec
Running xxx.SomeErrorTests
        Test Old #1
        Test Old #2
Tests run: 2, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 0.125 sec <<< FAILURE!

Results :

Failed tests:
  testOldOne(xxx.SomeErrorTests)
  testOldTwo(xxx.SomeErrorTests)

Tests run: 4, Failures: 2, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

Итак, как вы можете видеть, мой RunListener создан, но никогда не вызывается во время выполнения тестов.

Что я пропустил?

Техническая информация : Java 6, Maven 3.0.2, JUnit 4.8.1

Ответы [ 3 ]

2 голосов
/ 10 апреля 2015

Я пытался решить эту проблему в течение 3 дней и, наконец, обнаружил мою ошибку: поскольку я использовал плагин surefire для целей отчетности, у меня уже был раздел отчетов внутри моего pom. XML, и я пытался указать пользовательский слушатель там. Вместо этого я должен был указать это внутри секции сборки моего pom. Так что в основном вместо того, чтобы писать:

<reporting>
    <plugins>
        [...]
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <properties>
                    <property>
                        <name>listener</name>
                        <value>my.company.MyRunListener</value>
                    </property>
                </properties>
            </configuration>
        </plugin>
        [...]
</reporting>

Я должен был написать:

<build>
    <plugins>
        [...]
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <properties>
                    <property>
                        <name>listener</name>
                        <value>my.company.MyRunListener</value>
                    </property>
                </properties>
            </configuration>
        </plugin>
        [...]
</build>

Возможно, это было нелепо, и я просто не получил его раньше, но это решило мою проблему.

2 голосов
/ 05 марта 2011

Убедитесь, что ваша верная версия достаточно новая, она была представлена ​​только в версии 2.7.

Кроме того, если вы собираете RunListener в первом модуле многомодульной сборкион не будет доступен точно до тех пор, пока не будет построен.Довольно логично, но легко забыть.

0 голосов
/ 21 декабря 2014

Как основной класс java doc для JUnit4:

JUnitCore - это фасад для запуска тестов.Он поддерживает запуск тестов JUnit 4, тестов JUnit 3.8.x и их смесей.Чтобы запустить тесты из командной строки, запустите java org.junit.runner.JUnitCore TestClass1 TestClass2 .... Для однократных тестовых прогонов используйте статический метод runClasses (Class []).Если вы хотите добавить специальных слушателей, сначала создайте экземпляр JUnitCore и используйте его для запуска тестов.

Чтобы решить проблему, мне пришлось написать свой CusomtJUnitCore, добавить моего слушателя, а затем запуститьэто из командной строки.

Слушатель конфигурации в плагине maven-surefire хорошо работает с TestNG

...