将 JUnit RunListener 与 Maven 结合使用

Rom*_*las 5 junit surefire maven

我想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");
    }

}
Run Code Online (Sandbox Code Playgroud)

现在,在我的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>
Run Code Online (Sandbox Code Playgroud)

现在,当我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] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我的 RunListener 已创建,但在测试执行期间从未被调用。

我错过了什么?

技术信息:Java 6、Maven 3.0.2、JUnit 4.8.1

kro*_*old 2

确保你的surefire版本足够新,这只是在2.7版本中引入的。

除此之外,如果您在多模块构建的第一个模块中构建RunListener,则在构建之后才能确保它可用。很有逻辑,但很容易忘记。