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 2021/05/10 23:33:38 UTC

[maven-surefire] 01/01: [SUREFIRE-1910] Missleading error message when using -Dtest=....

This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch SUREFIRE-1910
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit 16f510d3cd08ffa78693e4038cb781a24abab703
Author: tibordigana <ti...@gmail.com>
AuthorDate: Tue May 11 01:33:29 2021 +0200

    [SUREFIRE-1910] Missleading error message when using -Dtest=....
---
 .../maven/plugin/failsafe/IntegrationTestMojo.java |  6 +--
 .../apache/maven/plugin/failsafe/VerifyMojo.java   | 10 ++--
 .../plugin/surefire/AbstractSurefireMojo.java      | 59 ++++++++++++++--------
 .../surefire/SurefireExecutionParameters.java      |  2 +-
 .../maven/plugin/surefire/SurefireHelper.java      |  2 +-
 .../plugin/surefire/SurefireReportParameters.java  |  2 +-
 .../AbstractSurefireMojoJava7PlusTest.java         |  4 +-
 .../plugin/surefire/AbstractSurefireMojoTest.java  |  4 +-
 .../maven/plugin/surefire/MojoMocklessTest.java    |  4 +-
 .../maven/plugin/surefire/SurefirePlugin.java      |  6 +--
 10 files changed, 59 insertions(+), 40 deletions(-)

diff --git a/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/IntegrationTestMojo.java b/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/IntegrationTestMojo.java
index a91139c..ee12c6b 100644
--- a/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/IntegrationTestMojo.java
+++ b/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/IntegrationTestMojo.java
@@ -135,8 +135,8 @@ public class IntegrationTestMojo
      *
      * @since 2.12
      */
-    @Parameter( property = "it.failIfNoSpecifiedTests" )
-    private Boolean failIfNoSpecifiedTests;
+    @Parameter( property = "it.failIfNoSpecifiedTests", defaultValue = "true" )
+    private boolean failIfNoSpecifiedTests;
 
     /**
      * Attach a debugger to the forked JVM. If set to "true", the process will suspend and wait for a debugger to attach
@@ -862,7 +862,7 @@ public class IntegrationTestMojo
     }
 
     @Override
-    public Boolean getFailIfNoSpecifiedTests()
+    public boolean getFailIfNoSpecifiedTests()
     {
         return failIfNoSpecifiedTests;
     }
diff --git a/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/VerifyMojo.java b/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/VerifyMojo.java
index 52eacbe..b691741 100644
--- a/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/VerifyMojo.java
+++ b/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/VerifyMojo.java
@@ -132,12 +132,12 @@ public class VerifyMojo
     private File[] summaryFiles;
 
     /**
-     * Set this to "true" to cause a failure if there are no tests to run.
+     * Set this to "true" to cause a failure if there are no tests to run. Defaults to "false".
      *
      * @since 2.4
      */
-    @Parameter( property = "failIfNoTests" )
-    private Boolean failIfNoTests;
+    @Parameter( property = "failIfNoTests", defaultValue = "false" )
+    private boolean failIfNoTests;
 
     /**
      * Set this to a value greater than 0 to fail the whole test set if the cumulative number of flakes reaches
@@ -233,7 +233,7 @@ public class VerifyMojo
 
         if ( !getTestClassesDirectory().exists() )
         {
-            if ( getFailIfNoTests() != null && getFailIfNoTests() )
+            if ( getFailIfNoTests() )
             {
                 throw new MojoFailureException( "No tests to run!" );
             }
@@ -360,7 +360,7 @@ public class VerifyMojo
     }
 
     @Override
-    public Boolean getFailIfNoTests()
+    public boolean getFailIfNoTests()
     {
         return failIfNoTests;
     }
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
index 5109fde..d75010c 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
@@ -121,7 +121,6 @@ import java.util.TreeSet;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.zip.ZipFile;
 
-import static java.lang.Boolean.TRUE;
 import static java.lang.Integer.parseInt;
 import static java.lang.Thread.currentThread;
 import static java.util.Arrays.asList;
@@ -152,6 +151,9 @@ import static org.apache.maven.surefire.api.util.ReflectionUtils.invokeMethodWit
 import static org.apache.maven.surefire.api.util.ReflectionUtils.tryGetMethod;
 import static org.apache.maven.surefire.api.booter.ProviderParameterNames.INCLUDE_JUNIT5_ENGINES_PROP;
 import static org.apache.maven.surefire.api.booter.ProviderParameterNames.EXCLUDE_JUNIT5_ENGINES_PROP;
+import static org.apache.maven.plugin.surefire.AbstractSurefireMojo.NoTestsFailureReason.NO_FAILURE;
+import static org.apache.maven.plugin.surefire.AbstractSurefireMojo.NoTestsFailureReason.NO_SPECIFIED_TESTS_RUN;
+import static org.apache.maven.plugin.surefire.AbstractSurefireMojo.NoTestsFailureReason.NO_TESTS_RUN;
 
 /**
  * Abstract base class for running tests using Surefire.
@@ -383,8 +385,8 @@ public abstract class AbstractSurefireMojo
      *
      * @since 2.4
      */
-    @Parameter( property = "failIfNoTests" )
-    private Boolean failIfNoTests;
+    @Parameter( property = "failIfNoTests", defaultValue = "false" )
+    private boolean failIfNoTests;
 
     /**
      * <strong>DEPRECATED</strong> since version 2.14. Use {@code forkCount} and {@code reuseForks} instead.
@@ -927,13 +929,20 @@ public abstract class AbstractSurefireMojo
             DefaultScanResult scan = scanForTestClasses();
             if ( !hasSuiteXmlFiles() && scan.isEmpty() )
             {
-                if ( getEffectiveFailIfNoTests() )
+                switch ( getEffectiveFailIfNoTests() )
                 {
-                    throw new MojoFailureException(
-                        "No tests were executed!  (Set -DfailIfNoTests=false to ignore this error.)" );
+                    case NO_SPECIFIED_TESTS_RUN:
+                        throw new MojoFailureException(
+                            "No tests were executed!  (Set -DfailIfNoTests=false to ignore this error.)" );
+                    case NO_TESTS_RUN:
+                        throw new MojoFailureException( "No tests matching pattern \""
+                            + getSpecificTests().toString()
+                            + "\" were executed! (Set "
+                            + "-D" + getPluginName() + ".failIfNoSpecifiedTests=false to ignore this error.)" );
+                    default:
+                        handleSummary( noTestsRun(), null );
+                        return;
                 }
-                handleSummary( noTestsRun(), null );
-                return;
             }
             logReportsDirectory();
             executeAfterPreconditionsChecked( scan, platform );
@@ -1115,7 +1124,7 @@ public abstract class AbstractSurefireMojo
         if ( !getTestClassesDirectory().exists()
             && ( getDependenciesToScan() == null || getDependenciesToScan().length == 0 ) )
         {
-            if ( TRUE.equals( getFailIfNoTests() ) )
+            if ( getFailIfNoTests() )
             {
                 throw new MojoFailureException( "No tests to run!" );
             }
@@ -1839,26 +1848,26 @@ public abstract class AbstractSurefireMojo
         return runOrders.contains( RunOrder.BALANCED ) || runOrders.contains( RunOrder.FAILEDFIRST );
     }
 
-    private boolean getEffectiveFailIfNoTests()
+    private NoTestsFailureReason getEffectiveFailIfNoTests()
     {
         if ( isSpecificTestSpecified() )
         {
-            if ( getFailIfNoSpecifiedTests() != null )
+            if ( getFailIfNoSpecifiedTests() )
             {
-                return getFailIfNoSpecifiedTests();
+                return NO_SPECIFIED_TESTS_RUN;
             }
-            else if ( getFailIfNoTests() != null )
+            else if ( getFailIfNoTests() )
             {
-                return getFailIfNoTests();
+                return NO_TESTS_RUN;
             }
             else
             {
-                return true;
+                return NO_FAILURE;
             }
         }
         else
         {
-            return getFailIfNoTests() != null && getFailIfNoTests();
+            return getFailIfNoTests() ? NO_TESTS_RUN : NO_FAILURE;
         }
     }
 
@@ -1881,7 +1890,7 @@ public abstract class AbstractSurefireMojo
         DirectoryScannerParameters directoryScannerParameters = null;
         if ( hasSuiteXmlFiles() && !isSpecificTestSpecified() )
         {
-            actualFailIfNoTests = getFailIfNoTests() != null && getFailIfNoTests();
+            actualFailIfNoTests = getFailIfNoTests();
             if ( !isTestNg )
             {
                 throw new MojoExecutionException( "suiteXmlFiles is configured, but there is no TestNG dependency" );
@@ -1891,12 +1900,12 @@ public abstract class AbstractSurefireMojo
         {
             if ( isSpecificTestSpecified() )
             {
-                actualFailIfNoTests = getEffectiveFailIfNoTests();
+                actualFailIfNoTests = getEffectiveFailIfNoTests() != NO_FAILURE;
                 setFailIfNoTests( actualFailIfNoTests );
             }
             else
             {
-                actualFailIfNoTests = getFailIfNoTests() != null && getFailIfNoTests();
+                actualFailIfNoTests = getFailIfNoTests();
             }
 
             // @todo remove these three params and use DirectoryScannerParameters to pass into DirectoryScanner only
@@ -3742,7 +3751,7 @@ public abstract class AbstractSurefireMojo
     }
 
 
-    public Boolean getFailIfNoTests()
+    public boolean getFailIfNoTests()
     {
         return failIfNoTests;
     }
@@ -4215,4 +4224,14 @@ public abstract class AbstractSurefireMojo
             return classpath;
         }
     }
+
+    /**
+     * No tests run failures.
+     */
+    enum NoTestsFailureReason
+    {
+        NO_FAILURE,
+        NO_SPECIFIED_TESTS_RUN,
+        NO_TESTS_RUN,
+    }
 }
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireExecutionParameters.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireExecutionParameters.java
index a570b82..2275b32 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireExecutionParameters.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireExecutionParameters.java
@@ -123,7 +123,7 @@ public interface SurefireExecutionParameters
 
     void setEncoding( String encoding );
 
-    Boolean getFailIfNoSpecifiedTests();
+    boolean getFailIfNoSpecifiedTests();
 
     void setFailIfNoSpecifiedTests( boolean failIfNoSpecifiedTests );
 
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireHelper.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireHelper.java
index d9a6918..d301ecc 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireHelper.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireHelper.java
@@ -253,7 +253,7 @@ public final class SurefireHelper
 
     private static boolean failIfNoTests( SurefireReportParameters reportParameters )
     {
-        return reportParameters.getFailIfNoTests() != null && reportParameters.getFailIfNoTests();
+        return reportParameters.getFailIfNoTests();
     }
 
     private static boolean isFatal( Exception firstForkException )
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireReportParameters.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireReportParameters.java
index 8b964e7..da808ed 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireReportParameters.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireReportParameters.java
@@ -56,7 +56,7 @@ public interface SurefireReportParameters
 
     void setReportsDirectory( File reportsDirectory );
 
-    Boolean getFailIfNoTests();
+    boolean getFailIfNoTests();
 
     void setFailIfNoTests( boolean failIfNoTests );
 
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
index f8a4c10..c1f8dc8 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
@@ -789,9 +789,9 @@ public class AbstractSurefireMojoJava7PlusTest
         }
 
         @Override
-        public Boolean getFailIfNoSpecifiedTests()
+        public boolean getFailIfNoSpecifiedTests()
         {
-            return null;
+            return false;
         }
 
         @Override
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
index 45e35b7..da3bcfe 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
@@ -2339,9 +2339,9 @@ public class AbstractSurefireMojoTest
         }
 
         @Override
-        public Boolean getFailIfNoSpecifiedTests()
+        public boolean getFailIfNoSpecifiedTests()
         {
-            return null;
+            return false;
         }
 
         @Override
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/MojoMocklessTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/MojoMocklessTest.java
index fe7a44a..c98cb75 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/MojoMocklessTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/MojoMocklessTest.java
@@ -638,9 +638,9 @@ public class MojoMocklessTest
         }
 
         @Override
-        public Boolean getFailIfNoSpecifiedTests()
+        public boolean getFailIfNoSpecifiedTests()
         {
-            return null;
+            return false;
         }
 
         @Override
diff --git a/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java b/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
index 5f48cad..0e3d850 100644
--- a/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
+++ b/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
@@ -118,8 +118,8 @@ public class SurefirePlugin
      *
      * @since 2.12
      */
-    @Parameter( property = "surefire.failIfNoSpecifiedTests" )
-    private Boolean failIfNoSpecifiedTests;
+    @Parameter( property = "surefire.failIfNoSpecifiedTests", defaultValue = "true" )
+    private boolean failIfNoSpecifiedTests;
 
     /**
      * Attach a debugger to the forked JVM. If set to "true", the process will suspend and wait for a debugger to attach
@@ -685,7 +685,7 @@ public class SurefirePlugin
     }
 
     @Override
-    public Boolean getFailIfNoSpecifiedTests()
+    public boolean getFailIfNoSpecifiedTests()
     {
         return failIfNoSpecifiedTests;
     }