You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2019/11/12 02:52:36 UTC
[maven-surefire] branch master updated: [SUREFIRE-1716] JUnit5
Parameterized tests and re-run should see unique test runs with different
parameters
This is an automated email from the ASF dual-hosted git repository.
tibordigana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
The following commit(s) were added to refs/heads/master by this push:
new 0c0d902 [SUREFIRE-1716] JUnit5 Parameterized tests and re-run should see unique test runs with different parameters
0c0d902 is described below
commit 0c0d902dec9b21e547a40762da59ac0f90fec934
Author: tibordigana <ti...@apache.org>
AuthorDate: Tue Nov 12 03:52:22 2019 +0100
[SUREFIRE-1716] JUnit5 Parameterized tests and re-run should see unique test runs with different parameters
---
.../apache/maven/surefire/its/JUnitPlatformIT.java | 29 +++++++-
.../surefire/junitplatform/RunListenerAdapter.java | 20 ++++--
.../junitplatform/JUnitPlatformProviderTest.java | 81 +++++++++++++++++++---
.../junitplatform/RunListenerAdapterTest.java | 10 +--
4 files changed, 119 insertions(+), 21 deletions(-)
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformIT.java
index 5a26e0f..765d1a7 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformIT.java
@@ -120,6 +120,19 @@ public class JUnitPlatformIT
.assertContainsText( "testcase name=\"73$71 ✔\" classname=\"<< ✨ >>\"" )
.assertContainsText( "testcase name=\"73$72 ✔\" classname=\"<< ✨ >>\"" )
.assertContainsText( XML_TESTSUITE_FRAGMENT );
+
+
+ validator.getSurefireReportsFile( "TEST-junitplatformenginejupiter.BasicJupiterTest.xml", UTF_8 )
+ .assertContainsText( "<testcase name=\"test(TestInfo)\" "
+ + "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
+ .assertContainsText( "<testcase name=\"0 + 1 = 1\" "
+ + "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
+ .assertContainsText( "<testcase name=\"1 + 2 = 3\" "
+ + "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
+ .assertContainsText( "<testcase name=\"49 + 51 = 100\" "
+ + "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
+ .assertContainsText( "<testcase name=\"1 + 100 = 101\" "
+ + "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" );
}
@Test
@@ -145,11 +158,25 @@ public class JUnitPlatformIT
@Test
public void testMultipleEngines()
{
- unpack( "junit-platform-multiple-engines", "-" + junit5Version + "-" + jqwikVersion )
+ OutputValidator validator =
+ unpack( "junit-platform-multiple-engines", "-" + junit5Version + "-" + jqwikVersion )
.sysProp( "junit5.version", junit5Version )
.sysProp( "jqwik.version", jqwikVersion )
.executeTest()
.verifyErrorFree( 7 );
+
+
+ validator.getSurefireReportsFile( "TEST-junitplatformenginejupiter.BasicJupiterTest.xml", UTF_8 )
+ .assertContainsText( "<testcase name=\"test(TestInfo)\" "
+ + "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
+ .assertContainsText( "<testcase name=\"add(int, int, int)[1]\" "
+ + "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
+ .assertContainsText( "<testcase name=\"add(int, int, int)[2]\" "
+ + "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
+ .assertContainsText( "<testcase name=\"add(int, int, int)[3]\" "
+ + "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
+ .assertContainsText( "<testcase name=\"add(int, int, int)[4]\" "
+ + "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" );
}
@Test
diff --git a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/RunListenerAdapter.java b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/RunListenerAdapter.java
index 5e61a90..5e1e631 100644
--- a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/RunListenerAdapter.java
+++ b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/RunListenerAdapter.java
@@ -20,6 +20,7 @@ package org.apache.maven.surefire.junitplatform;
*/
import static java.util.Collections.emptyMap;
+import static java.util.stream.Collectors.joining;
import static org.apache.maven.surefire.util.internal.ObjectUtils.systemProps;
import java.util.Map;
@@ -27,6 +28,7 @@ import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import java.util.regex.Pattern;
import org.apache.maven.surefire.report.PojoStackTraceWriter;
import org.apache.maven.surefire.report.RunListener;
@@ -46,6 +48,8 @@ import org.junit.platform.launcher.TestPlan;
final class RunListenerAdapter
implements TestExecutionListener
{
+ private static final Pattern COMMA_PATTERN = Pattern.compile( "," );
+
private final ConcurrentMap<TestIdentifier, Long> testStartTime = new ConcurrentHashMap<>();
private final ConcurrentMap<TestIdentifier, TestExecutionResult> failures = new ConcurrentHashMap<>();
private final RunListener runListener;
@@ -236,15 +240,23 @@ final class RunListenerAdapter
String realClassName = methodSource.getClassName();
String[] source = testPlan.getParent( testIdentifier )
- .map( i -> toClassMethodName( i ) )
+ .map( this::toClassMethodName )
.map( s -> new String[] { s[0], s[1] } )
.orElse( new String[] { realClassName, realClassName } );
+ String simpleClassNames = COMMA_PATTERN.splitAsStream( methodSource.getMethodParameterTypes() )
+ .map( s -> s.substring( 1 + s.lastIndexOf( '.' ) ) )
+ .collect( joining( "," ) );
+
+ boolean hasParams = !simpleClassNames.isEmpty();
String methodName = methodSource.getMethodName();
- boolean useMethod = display.equals( methodName ) || display.equals( methodName + "()" );
- String resolvedMethodName = useMethod ? methodName : display;
+ String methodSign = methodName + '(' + simpleClassNames + ')';
+ String description = testIdentifier.getLegacyReportingName();
+ boolean useDesc = description.startsWith( methodSign );
+ String methodDesc = hasParams ? ( useDesc ? description : methodSign ) : methodName;
+ String methodDisp = methodSign.equals( display ) ? methodDesc : display;
- return new String[] {source[0], source[1], methodName, resolvedMethodName};
+ return new String[] {source[0], source[1], methodDesc, methodDisp};
}
else if ( testSource.filter( ClassSource.class::isInstance ).isPresent() )
{
diff --git a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java
index 23e7ea7..16a7343 100644
--- a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java
+++ b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java
@@ -26,6 +26,7 @@ import static org.apache.maven.surefire.booter.ProviderParameterNames.TESTNG_EXC
import static org.apache.maven.surefire.booter.ProviderParameterNames.TESTNG_GROUPS_PROP;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
@@ -64,6 +65,7 @@ import org.apache.maven.surefire.util.TestsToRun;
import org.fest.assertions.Assertions;
import org.junit.Test;
import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.DisplayName;
import org.junit.platform.launcher.Launcher;
import org.junit.platform.launcher.TestIdentifier;
import org.junit.platform.launcher.TestPlan;
@@ -297,6 +299,32 @@ public class JUnitPlatformProviderTest
}
@Test
+ public void runDisplayNameTest() throws Exception
+ {
+ Launcher launcher = LauncherFactory.create();
+ ProviderParameters parameters = providerParametersMock();
+ JUnitPlatformProvider provider = new JUnitPlatformProvider( parameters, launcher );
+
+ RunListener listener = mock( RunListener.class );
+ ArgumentCaptor<ReportEntry> entryCaptor = ArgumentCaptor.forClass( ReportEntry.class );
+ RunListenerAdapter adapter = new RunListenerAdapter( listener );
+
+ launcher.registerTestExecutionListeners( adapter );
+
+ invokeProvider( provider, DisplayNameTest.class );
+
+ verify( listener, times( 1 ) ).testStarting( entryCaptor.capture() );
+ List<ReportEntry> reportEntries = entryCaptor.getAllValues();
+
+ assertEquals( 1, reportEntries.size() );
+
+ assertEquals( DisplayNameTest.class.getName(), reportEntries.get( 0 ).getSourceName() );
+ assertEquals( "<< ✨ >>", reportEntries.get( 0 ).getSourceText() );
+ assertEquals( "test1", reportEntries.get( 0 ).getName() );
+ assertEquals( "73$71 ✔", reportEntries.get( 0 ).getNameText() );
+ }
+
+ @Test
public void rerunParameterized()
throws Exception
{
@@ -309,12 +337,42 @@ public class JUnitPlatformProviderTest
"forkCount = 1\nreuseForks = true" ) );
JUnitPlatformProvider provider = new JUnitPlatformProvider( parameters, launcher );
+
TestPlanSummaryListener executionListener = new TestPlanSummaryListener();
- launcher.registerTestExecutionListeners( executionListener );
+
+ RunListener listener = mock( RunListener.class );
+ ArgumentCaptor<ReportEntry> entryCaptor = ArgumentCaptor.forClass( ReportEntry.class );
+ RunListenerAdapter adapter = new RunListenerAdapter( listener );
+
+ launcher.registerTestExecutionListeners( executionListener, adapter );
invokeProvider( provider, TestClass7.class );
assertThat( executionListener.summaries ).hasSize( 3 );
+
+ verify( listener, times( 4 ) ).testStarting( entryCaptor.capture() );
+ List<ReportEntry> reportEntries = entryCaptor.getAllValues();
+
+ assertEquals( TestClass7.class.getName(), reportEntries.get( 0 ).getSourceName() );
+ assertNull( reportEntries.get( 0 ).getSourceText() );
+ assertEquals( "testParameterizedTestCases(String, boolean)[1]", reportEntries.get( 0 ).getName() );
+ assertEquals( "[1] Always pass, true", reportEntries.get( 0 ).getNameText() );
+
+ assertEquals( TestClass7.class.getName(), reportEntries.get( 1 ).getSourceName() );
+ assertNull( reportEntries.get( 1 ).getSourceText() );
+ assertEquals( "testParameterizedTestCases(String, boolean)[2]", reportEntries.get( 1 ).getName() );
+ assertEquals( "[2] Always fail, false", reportEntries.get( 1 ).getNameText() );
+
+ assertEquals( TestClass7.class.getName(), reportEntries.get( 2 ).getSourceName() );
+ assertNull( reportEntries.get( 2 ).getSourceText() );
+ assertEquals( "testParameterizedTestCases(String, boolean)[2]", reportEntries.get( 2 ).getName() );
+ assertEquals( "[2] Always fail, false", reportEntries.get( 2 ).getNameText() );
+
+ assertEquals( TestClass7.class.getName(), reportEntries.get( 3 ).getSourceName() );
+ assertNull( reportEntries.get( 3 ).getSourceText() );
+ assertEquals( "testParameterizedTestCases(String, boolean)[2]", reportEntries.get( 3 ).getName() );
+ assertEquals( "[2] Always fail, false", reportEntries.get( 3 ).getNameText() );
+
TestExecutionSummary summary = executionListener.summaries.get( 0 );
assertEquals( 2, summary.getTestsFoundCount() );
assertEquals( 2, summary.getTestsStartedCount() );
@@ -327,7 +385,7 @@ public class JUnitPlatformProviderTest
assertEquals( 0, summary.getTestsSucceededCount() );
assertEquals( 1, summary.getTestsFailedCount() );
- summary = executionListener.summaries.get( 1 );
+ summary = executionListener.summaries.get( 2 );
assertEquals( 1, summary.getTestsFoundCount() );
assertEquals( 1, summary.getTestsStartedCount() );
assertEquals( 0, summary.getTestsSucceededCount() );
@@ -715,7 +773,6 @@ public class JUnitPlatformProviderTest
private static class TestPlanSummaryListener
extends SummaryGeneratingListener
{
-
private final List<TestExecutionSummary> summaries = new ArrayList<>();
@Override
@@ -950,14 +1007,6 @@ public class JUnitPlatformProviderTest
count += 1;
assertTrue( count >= 3 );
}
-
- /*@org.junit.jupiter.api.Test
- @org.junit.jupiter.api.Order( 2 )
- void testFailTwice2()
- {
- count += 1;
- assertTrue( count >= 3 );
- }*/
}
static class TestClass7
@@ -975,4 +1024,14 @@ public class JUnitPlatformProviderTest
assertTrue( value );
}
}
+
+ @DisplayName( "<< ✨ >>" )
+ static class DisplayNameTest
+ {
+ @org.junit.jupiter.api.Test
+ @DisplayName( "73$71 ✔" )
+ void test1()
+ {
+ }
+ }
}
diff --git a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/RunListenerAdapterTest.java b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/RunListenerAdapterTest.java
index bf85990..6e9eeeb 100644
--- a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/RunListenerAdapterTest.java
+++ b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/RunListenerAdapterTest.java
@@ -128,8 +128,8 @@ public class RunListenerAdapterTest
verify( listener ).testStarting( entryCaptor.capture() );
ReportEntry entry = entryCaptor.getValue();
- assertEquals( MY_TEST_METHOD_NAME, entry.getName() );
- assertEquals( MY_TEST_METHOD_NAME + "(String)", entry.getNameText() );
+ assertEquals( MY_TEST_METHOD_NAME + "(String)", entry.getName() );
+ assertNull( entry.getNameText() );
assertEquals( MyTestClass.class.getName(), entry.getSourceName() );
assertNull( entry.getSourceText() );
assertNull( entry.getStackTraceWriter() );
@@ -258,7 +258,7 @@ public class RunListenerAdapterTest
adapter.executionStarted( TestIdentifier.from( child2 ) );
inOrder.verify( listener )
.testStarting( new SimpleReportEntry( MyTestClass.class.getName(), "parent",
- MY_TEST_METHOD_NAME, MY_TEST_METHOD_NAME + "(String)" ) );
+ MY_TEST_METHOD_NAME + "(String)", null ) );
inOrder.verifyNoMoreInteractions();
Exception assumptionFailure = new Exception();
@@ -270,9 +270,9 @@ public class RunListenerAdapterTest
assertThat( report.getValue().getSourceText() )
.isEqualTo( "parent" );
assertThat( report.getValue().getName() )
- .isEqualTo( MY_TEST_METHOD_NAME );
- assertThat( report.getValue().getNameText() )
.isEqualTo( MY_TEST_METHOD_NAME + "(String)" );
+ assertThat( report.getValue().getNameText() )
+ .isNull();
assertThat( report.getValue().getElapsed() )
.isNotNull();
assertThat( report.getValue().getSystemProperties() )