maven surefire: how to print current test being run?
Asked Answered
F

3

13

Is there any way to get maven surefire to print the name of every unit test (i.e., test method) it's starting?

Something like:

testFoo: ... passed
testBar: ... failed
Flaunty answered 1/6, 2015 at 19:39 Comment(1)
Possibly duplicate of #15204256Copyboy
B
4

It's a bit of stretch, but you could implement a RunListener and add it to surefire. See how to configure it here.

Bollix answered 1/6, 2015 at 20:5 Comment(2)
Instead, why not log the test name from the test code itself ?Chelton
For anyone using JUnit 5, you can now provide a TestExecutionListener : junit.org/junit5/docs/current/user-guide/…Aruspex
C
6

In details

package com.example.mavenproject;

import org.junit.runner.Description;
import org.junit.runner.Result;
import org.junit.runner.notification.RunListener;

/**
 * @author Paul Verest
 */
public class PrintOutCurrentTestRunListener extends RunListener {
    @Override
    public void testRunStarted(Description description) throws Exception {
        // TODO all methods return null
        System.out.println("testRunStarted " + description.getClassName() + " " + description.getDisplayName() + " "
                + description.toString());
    }

    public void testStarted(Description description) throws Exception {
        System.out.println("testStarted "
                + description.toString());
    }

    public void testFinished(Description description) throws Exception {
        System.out.println("testFinished "
                + description.toString());
    }

    public void testRunFinished(Result result) throws Exception {
        System.out.println("testRunFinished " + result.toString()
                + " time:"+result.getRunTime()
                +" R"+result.getRunCount()
                +" F"+result.getFailureCount()
                +" I"+result.getIgnoreCount()
                );
    }
}

and in pom.xml

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<!-- -->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <properties>
                    <property>
                        <name>listener</name>
                        <value>com.example.mavenproject.PrintOutCurrentTestRunListener</value>
                    </property>
                </properties>
            </configuration>
        </plugin>
    </plugins>
</build>
Copyboy answered 10/11, 2016 at 10:35 Comment(2)
Does not appear as though System.out.println makes it into the Maven console log, nor any report.Rumrunner
It works for junit 4 only, in junit 5 you must use TestExecutionListener (see details here)Ranking
B
4

It's a bit of stretch, but you could implement a RunListener and add it to surefire. See how to configure it here.

Bollix answered 1/6, 2015 at 20:5 Comment(2)
Instead, why not log the test name from the test code itself ?Chelton
For anyone using JUnit 5, you can now provide a TestExecutionListener : junit.org/junit5/docs/current/user-guide/…Aruspex
A
0

Alternatively you can run maven in debug mode with --debug or -X flags

Artery answered 21/9, 2020 at 5:37 Comment(1)
It doesn't log successfully executed tests.Plea

© 2022 - 2024 — McMap. All rights reserved.