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 2016/10/13 19:31:23 UTC

[22/25] maven-surefire git commit: [SUREFIRE-1293] Simplify org.apache.maven.plugin.surefire.report.TestSetRunListener by using the null object pattern

[SUREFIRE-1293] Simplify org.apache.maven.plugin.surefire.report.TestSetRunListener
by using the null object pattern


Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/fd9f6e55
Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/fd9f6e55
Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/fd9f6e55

Branch: refs/heads/junit5
Commit: fd9f6e5598e7ce6cdb4168ce15cf6ca138b7753f
Parents: 77cafbe
Author: Benedikt Ritter <br...@apache.org>
Authored: Sun Oct 9 16:41:49 2016 +0200
Committer: Tibor17 <ti...@lycos.com>
Committed: Wed Oct 12 11:26:20 2016 +0200

----------------------------------------------------------------------
 .../surefire/report/DefaultReporterFactory.java | 46 +++++++++--
 .../report/NullConsoleOutputReceiver.java       | 55 +++++++++++++
 .../surefire/report/NullConsoleReporter.java    | 58 +++++++++++++
 .../surefire/report/NullFileReporter.java       | 45 ++++++++++
 .../report/NullStatelessXmlReporter.java        | 48 +++++++++++
 .../surefire/report/NullStatisticsReporter.java | 66 +++++++++++++++
 .../surefire/report/TestSetRunListener.java     | 87 ++++----------------
 .../surefire/runorder/StatisticsReporter.java   | 11 ++-
 8 files changed, 335 insertions(+), 81 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/fd9f6e55/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java
----------------------------------------------------------------------
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java
index a2bc7ec..e011fee 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java
@@ -20,9 +20,9 @@ package org.apache.maven.plugin.surefire.report;
  */
 
 import org.apache.maven.plugin.surefire.StartupReportConfiguration;
-import org.apache.maven.plugin.surefire.runorder.StatisticsReporter;
 import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
 import org.apache.maven.plugin.surefire.log.api.NullConsoleLogger;
+import org.apache.maven.plugin.surefire.runorder.StatisticsReporter;
 import org.apache.maven.shared.utils.logging.MessageBuilder;
 import org.apache.maven.surefire.report.ReporterFactory;
 import org.apache.maven.surefire.report.RunListener;
@@ -39,6 +39,7 @@ import java.util.Map;
 import java.util.TreeMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
+import static org.apache.commons.lang3.ObjectUtils.defaultIfNull;
 import static org.apache.maven.plugin.surefire.report.ConsoleReporter.PLAIN;
 import static org.apache.maven.plugin.surefire.report.DefaultReporterFactory.TestResultType.error;
 import static org.apache.maven.plugin.surefire.report.DefaultReporterFactory.TestResultType.failure;
@@ -64,7 +65,6 @@ public class DefaultReporterFactory
 {
     private final StartupReportConfiguration reportConfiguration;
     private final ConsoleLogger consoleLogger;
-    private final StatisticsReporter statisticsReporter;
     private final Collection<TestSetRunListener> listeners;
 
     private RunStatistics globalStats = new RunStatistics();
@@ -82,19 +82,17 @@ public class DefaultReporterFactory
     {
         this.reportConfiguration = reportConfiguration;
         this.consoleLogger = consoleLogger;
-        statisticsReporter = reportConfiguration.getStatisticsReporter();
         listeners = new ConcurrentLinkedQueue<TestSetRunListener>();
     }
 
     public RunListener createReporter()
     {
-        ConsoleReporter consoleReporter = shouldReportToConsole() ? new ConsoleReporter( consoleLogger ) : null;
         TestSetRunListener testSetRunListener =
-            new TestSetRunListener( consoleReporter,
-                                    reportConfiguration.instantiateFileReporter(),
-                                    reportConfiguration.instantiateStatelessXmlReporter(),
-                                    reportConfiguration.instantiateConsoleOutputFileReporter(),
-                                    statisticsReporter,
+            new TestSetRunListener( createConsoleReporter(),
+                                    createFileReporter(),
+                                    createSimpleXMLReporter(),
+                                    createConsoleOutputReceiver(),
+                                    createStatisticsReporter(),
                                     reportConfiguration.isTrimStackTrace(),
                                     PLAIN.equals( reportConfiguration.getReportFormat() ),
                                     reportConfiguration.isBriefOrPlainFormat() );
@@ -102,6 +100,36 @@ public class DefaultReporterFactory
         return testSetRunListener;
     }
 
+    private ConsoleReporter createConsoleReporter()
+    {
+        return shouldReportToConsole() ? new ConsoleReporter( consoleLogger ) : NullConsoleReporter.INSTANCE;
+    }
+
+    private FileReporter createFileReporter()
+    {
+        final FileReporter fileReporter = reportConfiguration.instantiateFileReporter();
+        return defaultIfNull( fileReporter, NullFileReporter.INSTANCE );
+    }
+
+    private StatelessXmlReporter createSimpleXMLReporter()
+    {
+        final StatelessXmlReporter xmlReporter = reportConfiguration.instantiateStatelessXmlReporter();
+        return defaultIfNull( xmlReporter, NullStatelessXmlReporter.INSTANCE );
+    }
+
+    private TestcycleConsoleOutputReceiver createConsoleOutputReceiver()
+    {
+        final TestcycleConsoleOutputReceiver consoleOutputReceiver =
+                reportConfiguration.instantiateConsoleOutputFileReporter();
+        return defaultIfNull( consoleOutputReceiver, NullConsoleOutputReceiver.INSTANCE );
+    }
+
+    private StatisticsReporter createStatisticsReporter()
+    {
+        final StatisticsReporter statisticsReporter = reportConfiguration.getStatisticsReporter();
+        return defaultIfNull( statisticsReporter, NullStatisticsReporter.INSTANCE );
+    }
+
     private boolean shouldReportToConsole()
     {
         return reportConfiguration.isUseFile()

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/fd9f6e55/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullConsoleOutputReceiver.java
----------------------------------------------------------------------
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullConsoleOutputReceiver.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullConsoleOutputReceiver.java
new file mode 100644
index 0000000..55e4ee2
--- /dev/null
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullConsoleOutputReceiver.java
@@ -0,0 +1,55 @@
+package org.apache.maven.plugin.surefire.report;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.surefire.report.ReportEntry;
+
+/**
+ * ConsoleReporter doing nothing rather than using null.
+ *
+ * @author <a href="mailto:britter@apache.org">Benedikt Ritter</a>
+ * @since 2.19.2
+ */
+class NullConsoleOutputReceiver
+    implements TestcycleConsoleOutputReceiver
+{
+
+    static final NullConsoleOutputReceiver INSTANCE = new NullConsoleOutputReceiver();
+
+    private NullConsoleOutputReceiver()
+    {
+    }
+
+    public void testSetStarting( ReportEntry reportEntry )
+    {
+    }
+
+    public void testSetCompleted( ReportEntry report )
+    {
+    }
+
+    public void close()
+    {
+    }
+
+    public void writeTestOutput( byte[] buf, int off, int len, boolean stdout )
+    {
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/fd9f6e55/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullConsoleReporter.java
----------------------------------------------------------------------
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullConsoleReporter.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullConsoleReporter.java
new file mode 100644
index 0000000..1bd4e9a
--- /dev/null
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullConsoleReporter.java
@@ -0,0 +1,58 @@
+package org.apache.maven.plugin.surefire.report;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.plugin.surefire.log.api.NullConsoleLogger;
+import org.apache.maven.surefire.report.ReportEntry;
+
+/**
+ * ConsoleReporter doing nothing rather than using null.
+ *
+ * @author <a href="mailto:britter@apache.org">Benedikt Ritter</a>
+ * @since 2.19.2
+ */
+class NullConsoleReporter
+    extends ConsoleReporter
+{
+
+    static final NullConsoleReporter INSTANCE = new NullConsoleReporter();
+
+    private NullConsoleReporter()
+    {
+        super( new NullConsoleLogger() );
+    }
+
+    @Override
+    public void testSetStarting( ReportEntry report )
+    {
+    }
+
+    @Override
+    public void testSetCompleted( WrappedReportEntry report, TestSetStats testSetStats, List<String> testResults )
+    {
+    }
+
+    @Override
+    public void reset()
+    {
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/fd9f6e55/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullFileReporter.java
----------------------------------------------------------------------
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullFileReporter.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullFileReporter.java
new file mode 100644
index 0000000..bf7e3ef
--- /dev/null
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullFileReporter.java
@@ -0,0 +1,45 @@
+package org.apache.maven.plugin.surefire.report;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+/**
+ * FileReporter doing nothing rather than using null.
+ *
+ * @author <a href="mailto:britter@apache.org">Benedikt Ritter</a>
+ * @since 2.19.2
+ */
+class NullFileReporter
+    extends FileReporter
+{
+
+    static final NullFileReporter INSTANCE = new NullFileReporter();
+
+    private NullFileReporter()
+    {
+        super( null, null );
+    }
+
+    @Override
+    public void testSetCompleted( WrappedReportEntry report, TestSetStats testSetStats, List<String> testResults )
+    {
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/fd9f6e55/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullStatelessXmlReporter.java
----------------------------------------------------------------------
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullStatelessXmlReporter.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullStatelessXmlReporter.java
new file mode 100644
index 0000000..5895c8a
--- /dev/null
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullStatelessXmlReporter.java
@@ -0,0 +1,48 @@
+package org.apache.maven.plugin.surefire.report;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * FileReporter doing nothing rather than using null.
+ *
+ * @author <a href="mailto:britter@apache.org">Benedikt Ritter</a>
+ * @since 2.19.2
+ */
+class NullStatelessXmlReporter
+    extends StatelessXmlReporter
+{
+
+    static final NullStatelessXmlReporter INSTANCE = new NullStatelessXmlReporter();
+
+    private NullStatelessXmlReporter()
+    {
+        super( null, null, false, 0, null, null );
+    }
+
+    @Override
+    public void testSetCompleted( WrappedReportEntry testSetReportEntry, TestSetStats testSetStats )
+    {
+    }
+
+    @Override
+    public void cleanTestHistoryMap()
+    {
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/fd9f6e55/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullStatisticsReporter.java
----------------------------------------------------------------------
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullStatisticsReporter.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullStatisticsReporter.java
new file mode 100644
index 0000000..5e355ca
--- /dev/null
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullStatisticsReporter.java
@@ -0,0 +1,66 @@
+package org.apache.maven.plugin.surefire.report;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.surefire.runorder.StatisticsReporter;
+import org.apache.maven.surefire.report.ReportEntry;
+
+/**
+ * StatisticsReporter doing nothing rather than using null.
+ *
+ * @author <a href="mailto:britter@apache.org">Benedikt Ritter</a>
+ * @since 2.19.2
+ */
+class NullStatisticsReporter
+    extends StatisticsReporter
+{
+
+    static final NullStatisticsReporter INSTANCE = new NullStatisticsReporter();
+
+    private NullStatisticsReporter()
+    {
+        super( null, null, null );
+    }
+
+    @Override
+    public synchronized void testSetCompleted()
+    {
+    }
+
+    @Override
+    public void testSucceeded( ReportEntry report )
+    {
+    }
+
+    @Override
+    public void testSkipped( ReportEntry report )
+    {
+    }
+
+    @Override
+    public void testError( ReportEntry report )
+    {
+    }
+
+    @Override
+    public void testFailed( ReportEntry report )
+    {
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/fd9f6e55/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestSetRunListener.java
----------------------------------------------------------------------
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestSetRunListener.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestSetRunListener.java
index 4b12884..dbc802c 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestSetRunListener.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestSetRunListener.java
@@ -24,8 +24,8 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import org.apache.maven.plugin.surefire.runorder.StatisticsReporter;
 import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
+import org.apache.maven.plugin.surefire.runorder.StatisticsReporter;
 import org.apache.maven.surefire.report.ConsoleOutputReceiver;
 import org.apache.maven.surefire.report.ReportEntry;
 import org.apache.maven.surefire.report.RunListener;
@@ -88,50 +88,32 @@ public class TestSetRunListener
 
     public void debug( String message )
     {
-        if ( consoleReporter != null )
-        {
-            consoleReporter.getConsoleLogger().debug( trimTrailingNewLine( message ) );
-        }
+        consoleReporter.getConsoleLogger().debug( trimTrailingNewLine( message ) );
     }
 
     public void info( String message )
     {
-        if ( consoleReporter != null )
-        {
-            consoleReporter.getConsoleLogger().info( trimTrailingNewLine( message ) );
-        }
+        consoleReporter.getConsoleLogger().info( trimTrailingNewLine( message ) );
     }
 
     public void warning( String message )
     {
-        if ( consoleReporter != null )
-        {
-            consoleReporter.getConsoleLogger().warning( trimTrailingNewLine( message ) );
-        }
+        consoleReporter.getConsoleLogger().warning( trimTrailingNewLine( message ) );
     }
 
     public void error( String message )
     {
-        if ( consoleReporter != null )
-        {
-            consoleReporter.getConsoleLogger().error( trimTrailingNewLine( message ) );
-        }
+        consoleReporter.getConsoleLogger().error( trimTrailingNewLine( message ) );
     }
 
     public void error( String message, Throwable t )
     {
-        if ( consoleReporter != null )
-        {
-            consoleReporter.getConsoleLogger().error( message, t );
-        }
+        consoleReporter.getConsoleLogger().error( message, t );
     }
 
     public void error( Throwable t )
     {
-        if ( consoleReporter != null )
-        {
-            consoleReporter.getConsoleLogger().error( t );
-        }
+        consoleReporter.getConsoleLogger().error( t );
     }
 
     public void writeTestOutput( byte[] buf, int off, int len, boolean stdout )
@@ -157,10 +139,7 @@ public class TestSetRunListener
     public void testSetStarting( ReportEntry report )
     {
         detailsForThis.testSetStart();
-        if ( consoleReporter != null )
-        {
-            consoleReporter.testSetStarting( report );
-        }
+        consoleReporter.testSetStarting( report );
         consoleOutputReceiver.testSetStarting( report );
     }
 
@@ -175,27 +154,12 @@ public class TestSetRunListener
         final WrappedReportEntry wrap = wrapTestSet( report );
         final List<String> testResults =
                 briefOrPlainFormat ? detailsForThis.getTestResults() : Collections.<String>emptyList();
-        if ( fileReporter != null )
-        {
-            fileReporter.testSetCompleted( wrap, detailsForThis, testResults );
-        }
-        if ( simpleXMLReporter != null )
-        {
-            simpleXMLReporter.testSetCompleted( wrap, detailsForThis );
-        }
-        if ( statisticsReporter != null )
-        {
-            statisticsReporter.testSetCompleted();
-        }
-        if ( consoleReporter != null )
-        {
-            consoleReporter.testSetCompleted( wrap, detailsForThis, testResults );
-        }
+        fileReporter.testSetCompleted( wrap, detailsForThis, testResults );
+        simpleXMLReporter.testSetCompleted( wrap, detailsForThis );
+        statisticsReporter.testSetCompleted();
+        consoleReporter.testSetCompleted( wrap, detailsForThis, testResults );
         consoleOutputReceiver.testSetCompleted( wrap );
-        if ( consoleReporter != null )
-        {
-            consoleReporter.reset();
-        }
+        consoleReporter.reset();
 
         wrap.getStdout().free();
         wrap.getStdErr().free();
@@ -218,10 +182,7 @@ public class TestSetRunListener
     {
         WrappedReportEntry wrapped = wrap( reportEntry, SUCCESS );
         detailsForThis.testSucceeded( wrapped );
-        if ( statisticsReporter != null )
-        {
-            statisticsReporter.testSucceeded( reportEntry );
-        }
+        statisticsReporter.testSucceeded( reportEntry );
         clearCapture();
     }
 
@@ -229,10 +190,7 @@ public class TestSetRunListener
     {
         WrappedReportEntry wrapped = wrap( reportEntry, ERROR );
         detailsForThis.testError( wrapped );
-        if ( statisticsReporter != null )
-        {
-            statisticsReporter.testError( reportEntry );
-        }
+        statisticsReporter.testError( reportEntry );
         clearCapture();
     }
 
@@ -240,10 +198,7 @@ public class TestSetRunListener
     {
         WrappedReportEntry wrapped = wrap( reportEntry, FAILURE );
         detailsForThis.testFailure( wrapped );
-        if ( statisticsReporter != null )
-        {
-            statisticsReporter.testFailed( reportEntry );
-        }
+        statisticsReporter.testFailed( reportEntry );
         clearCapture();
     }
 
@@ -256,10 +211,7 @@ public class TestSetRunListener
         WrappedReportEntry wrapped = wrap( reportEntry, SKIPPED );
 
         detailsForThis.testSkipped( wrapped );
-        if ( statisticsReporter != null )
-        {
-            statisticsReporter.testSkipped( reportEntry );
-        }
+        statisticsReporter.testSkipped( reportEntry );
         clearCapture();
     }
 
@@ -303,10 +255,7 @@ public class TestSetRunListener
 
     public void close()
     {
-        if ( consoleOutputReceiver != null )
-        {
-            consoleOutputReceiver.close();
-        }
+        consoleOutputReceiver.close();
     }
 
     public void  addTestMethodStats()

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/fd9f6e55/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/runorder/StatisticsReporter.java
----------------------------------------------------------------------
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/runorder/StatisticsReporter.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/runorder/StatisticsReporter.java
index 9dd3380..a53db02 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/runorder/StatisticsReporter.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/runorder/StatisticsReporter.java
@@ -28,7 +28,7 @@ import static org.apache.maven.plugin.surefire.runorder.RunEntryStatisticsMap.fr
 /**
  * @author Kristian Rosenvold
  */
-public final class StatisticsReporter
+public class StatisticsReporter
 {
     private final RunEntryStatisticsMap existing;
 
@@ -38,9 +38,14 @@ public final class StatisticsReporter
 
     public StatisticsReporter( File dataFile )
     {
+        this( dataFile, fromFile( dataFile ), new RunEntryStatisticsMap() );
+    }
+
+    protected StatisticsReporter( File dataFile, RunEntryStatisticsMap existing, RunEntryStatisticsMap newRestuls )
+    {
         this.dataFile = dataFile;
-        existing = fromFile( dataFile );
-        newResults = new RunEntryStatisticsMap();
+        this.existing = existing;
+        this.newResults = newRestuls;
     }
 
     public synchronized void testSetCompleted()