| ------ |
| Introduction |
| ------ |
| Stephen Connolly |
| Allan Ramirez |
| ------ |
| 2011-06-27 |
| ------ |
| |
| ~~ 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. |
| |
| ~~ NOTE: For help with the syntax of this file, see: |
| ~~ http://maven.apache.org/doxia/references/apt-format.html |
| |
| |
| Maven ${thisPlugin} Plugin |
| |
| |
| Requirements: Maven 3.x and JDK 1.7 or higher. Due to wrong formatting of console text messages |
| in Maven Version prior to 3.1.0 it is highly recommended to use Maven 3.1.0 or higher. |
| |
| |
| This is the road map of the development, see the {{{https://github.com/apache/maven-surefire/pull/251}GH}}. |
| |
| *---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| ||Versions ||Release Targets | |
| *---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| | | Maven API 3.0 and Java 1.7 \ | |
| | | \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1493}Maven Plugin API 3.0}} \ | |
| | 3.0.0-M1 | {{{https://issues.apache.org/jira/browse/SUREFIRE-1474}Java 1.7 as minimum}} \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1212}@Component is deprecated. @Parameter should be used instead}} \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1588}Surefire manifest jar classloading broken on latest Debian/Ubuntu Java8}} \ | |
| | | {{{https://issues.apache.org/jira/projects/SUREFIRE/versions/12342871}See the Release Notes for the version 3.0.0-M1}} \ | |
| *---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| | | Fixed: JDK9 and Windows Class-Path issues, 3.0 and Legacy Report XSD, 3.0.0-M2 shadefire \ | |
| | | \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1568}Fixed JDK9+ (Jigsaw) modular paths (module-info.java) having white spaces on file system}} \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1593}Windows slashes appear in relative paths of Class-Path in MANIFEST.MF (Boot Manifest-JAR)}} \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1602}Surefire fails loading class ForkedBooter when using a sub-directory pom file}} \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1605}Plugin fails if used Toolchains together with JDK9+ and (Jigsaw) modular paths (module-info.java)}} \ | |
| | 3.0.0-M2 | {{{https://issues.apache.org/jira/browse/SUREFIRE-1590}3.0 and Legacy Report XSD}} \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1600}3.0.0-M2 shadefire}} \ | |
| | | \ | |
| | | Feature: Option to switch-off Java 9 modules \ | |
| | | \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1531}Option to switch-off Java 9 modules}} \ | |
| | | \ | |
| | | {{{https://issues.apache.org/jira/projects/SUREFIRE/versions/12344396}See the Release Notes for the version 3.0.0-M2}} \ | |
| *---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| | | Fixed: maven-surefire-report-plugin supports JDK11, JUnit5 issues, deprecated skipTests in Failsafe plugin, used ShadeFire 3.0.0-M2 \ | |
| | | \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1613}maven-surefire-report-plugin fails on JDK 11}} \ | |
| | 3.0.0-M3 | {{{https://issues.apache.org/jira/browse/SUREFIRE-1614}JUnit Runner that writes to System.out corrupts Surefire's STDOUT when using JUnit's Vintage Engine}} \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1616}Smart stacktrace in test summary should not print JUnit5 assertion exception type}} \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1611}Deprecate skipTests in Failsafe Plugin}} \ | |
| | | {{{https://issues.apache.org/jira/projects/SUREFIRE/versions/12342872}See the Release Notes for the version 3.0.0-M3}} \ | |
| *---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| | | Provided 3 extensions of reporters which can be used to customize XML report, console and file reporters. It is very useful for JUnit5 users. \ | |
| | | We reworked the internal implementation so that new commands and events can be easily added. The impl is located in a center point and it is a prerequisite in next versions. \ | |
| | 3.0.0-M4 | Provided bug fixes for Docker Alpine/BusyBox Linux, JUnit5 and 43 more. \ | |
| | | \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1222}ForkClient attempts to consume unrelated lines}} \ | |
| *---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| | | Test Report tasks (prerequisite: SUREFIRE-1222 in 3.0.0-M4) \ | |
| | | New interprocess communication with TCP/IP which fixed current blocker and critical bugs. \ | |
| | | Provided extensions which can be used to customize this interprocess communication in plugin configuration. It is internally used to switch over the pipes and TCP connector. \ | |
| | | (1) We will identify the test by UniqueId in SimpleReportEntry and not by the traditional combination of class/method name. (ready for parameterized tests and a coherent re-run) \ | |
| | | (2) TestSetRunListener should not cache test event and make any guess about the impl in StatelessXmlReporter. TestSetRunListener should only forward events to multiple reporters.\ | |
| | 3.0.0-M5 | (3) Fire and consume more events (normal run start/end, re-run start/end) \ | |
| | | (4) StatelessXmlReporter repeatedly generates XML report. It is stateful report and won't work if re-run or parallel executions send test events out of order. Prerequisite: 1-3 \ | |
| | | \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1658}TCP/IP Channel for forked Surefire JVM. Extensions API and SPI. Polymorphism for remote and local process communication.}} \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1661}ConsoleOutputFileReporter should support parallel execution of test-sets}} \ | |
| *---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| | | Providers implementation and API \ | |
| | | More test events used to negotiate tests to run on particular fork JVM. It is useful in situations when the tests are filtered by group/category or classpath scan with file \ | |
| | 3.0.0-M6 | filter (fork JVM is preferable over Maven JVM) and used in Test List Processor (3.0.0-M7). We will keep IsolatedClassLoader for extension 'Test List Processor' so that the user \ | |
| | | can decide the JVM where the tests will be searched. Possibly JUnit5 provider will be able to scan classes by annotations, see launcher.discover(), and negotiate over the forks. \ | \ | |
| | | \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-1535}Surefire unable to run testng suites in parallel}} \ | |
| *---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| | | Extensions API to customize test-set with test list processor (prerequisite: 3.0.0-M6) \ | |
| | 3.0.0-M7 | (possibly the scan of classpath based on annotations, currently the scan is done based on pattern of file name e.g. -Dtest=MyTest) \ | |
| | | \ | |
| | | {{{https://issues.apache.org/jira/browse/SUREFIRE-726}Test list preprocessor support for tests to be run}} \ | |
| *---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| | 3.0.0-M8 | Breaking backwards compatibility with system properties in configuration parameters, removing deprecated configuration parameters and removing deprecated code, etc. \ | |
| *---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| |
| #{if}(${project.artifactId}=="maven-surefire-plugin") |
| The Surefire Plugin is used during the <<<test>>> phase of the build |
| lifecycle to execute the unit tests of an application. It generates reports |
| in two different file formats: |
| #{else} |
| The Failsafe Plugin is designed to run integration tests while the Surefire Plugin is designed to run unit tests. |
| The name (failsafe) was chosen both because it is a synonym of surefire and because it implies that when it fails, it |
| does so in a safe way. |
| |
| The Maven lifecycle has four phases for running integration tests: |
| |
| * <<<pre-integration-test>>> for setting up the integration test environment. |
| |
| * <<<integration-test>>> for running the integration tests. |
| |
| * <<<post-integration-test>>> for tearing down the integration test environment. |
| |
| * <<<verify>>> for checking the results of the integration tests. |
| |
| [] |
| |
| If you use the Surefire Plugin for running tests, then when you have a test failure, the build will stop at the |
| <<<integration-test>>> phase and your integration test environment will not have been torn down correctly. |
| |
| The Failsafe Plugin is used during the <<<integration-test>>> and <<<verify>>> phases of the build |
| lifecycle to execute the integration tests of an application. The Failsafe Plugin will not fail the build during |
| the <<<integration-test>>> phase, thus enabling the <<<post-integration-test>>> phase to execute. |
| |
| NOTE: when running integration tests, you should invoke Maven with the (shorter to type too) |
| |
| +---+ |
| mvn verify |
| +---+ |
| |
| rather than trying to invoke the <<<integration-test>>> phase directly, as otherwise the <<<post-integration-test>>> |
| phase will not be executed. |
| |
| The Failsafe Plugin generates reports in two different file formats: |
| |
| #{end} |
| |
| * Plain text files (<<<*.txt>>>) |
| |
| * XML files (<<<*.xml>>>) |
| |
| [] |
| |
| By default, these files are generated in <<<$\{basedir\}/target/${thisPlugin.toLowerCase()}-reports/TEST-*.xml>>>. |
| |
| The schema for the ${thisPlugin} XML reports is available at |
| {{{./xsd/${thisPlugin.toLowerCase()}-test-report-3.0.xsd}${thisPlugin} XML Report Schema}}. |
| |
| The XML reports generated by legacy plugins (versions up to 2.22.0) should be validated by |
| {{{./xsd/${thisPlugin.toLowerCase()}-test-report.xsd}Legacy ${thisPlugin} XML Report Schema}}. |
| |
| Two plugin versions (2.22.1 and 3.0.0-M1) however generate 3.0 XML reports they still refer to legacy |
| schema (see <<<noNamespaceSchemaLocation>>> in XML Report). The projects which expect XML Reports |
| validated by XSD Schema, tools e.g xUnit, should not use versions 2.22.1 and 3.0.0-M1 of the ${thisPlugin} plugin. |
| |
| For an HTML format of the report, please see the |
| {{{http://maven.apache.org/plugins/maven-surefire-report-plugin/}Maven Surefire Report Plugin}}. |
| |
| #{if}(${project.artifactId}=="maven-failsafe-plugin") |
| By default this plugin generates summary XML file at <<<$\{basedir\}/target/failsafe-reports/failsafe-summary.xml>>> |
| and the schema is available at {{{./xsd/failsafe-summary.xsd}Failsafe XML Summary Schema}}. |
| #{end} |
| |
| * Goals Overview |
| |
| #{if}(${project.artifactId}=="maven-surefire-plugin") |
| The Surefire Plugin has only one goal: |
| |
| * {{{./test-mojo.html}surefire:test}} runs the unit tests of an application. |
| |
| [] |
| |
| #{else} |
| The Failsafe Plugin has only two goals: |
| |
| * {{{./integration-test-mojo.html}failsafe:integration-test}} runs the integration tests of an application. |
| |
| * {{{./verify-mojo.html}failsafe:verify}} verifies that the integration tests of an application passed. |
| |
| [] |
| |
| #{end} |
| |
| * Usage |
| |
| General instructions on how to use the ${thisPlugin} Plugin can be found on the {{{./usage.html}usage page}}. Some more |
| specific use cases are described in the examples listed below. Additionally, users can contribute to the |
| {{{https://github.com/apache/maven-surefire}GitHub project}}. |
| |
| In case you still have questions regarding the plugin's usage, please have a look at the {{{./faq.html}FAQ}} and feel |
| free to contact the {{{./mailing-lists.html}user mailing list}}. The posts to the mailing list are archived and could |
| already contain the answer to your question as part of an older thread. Hence, it is also worth browsing/searching |
| the {{{./mailing-lists.html}mail archive}}. |
| |
| If you feel like the plugin is missing a feature or has a defect, you can file a feature request or bug report in our |
| {{{./issue-management.html}issue tracker}}. When creating a new issue, please provide a comprehensive description of your |
| concern. Especially for fixing bugs it is crucial that the developers can reproduce your problem. For this reason, |
| entire debug logs, POMs or most preferably little demo projects attached to the issue are very much appreciated. |
| Of course, patches are welcome, too. Contributors can check out the project from our |
| {{{./scm.html}source repository}} and will find supplementary information in the |
| {{{http://maven.apache.org/guides/development/guide-helping.html}guide to helping with Maven}}. |
| |
| * Examples |
| |
| The following examples show how to use the ${thisPlugin} Plugin in more advanced use cases: |
| |
| * {{{./examples/testng.html}Using TestNG}} |
| |
| * {{{./examples/junit-platform.html}Using JUnit 5 Platform}} |
| |
| * {{{./examples/junit.html}Using JUnit}} |
| |
| * {{{./examples/pojo-test.html}Using POJO Tests}} |
| |
| * {{{./examples/skipping-tests.html}Skipping Tests}} |
| |
| * {{{./examples/skip-after-failure.html}Skip After Failure}} |
| |
| * {{{./examples/inclusion-exclusion.html}Inclusions and Exclusions of Tests}} |
| |
| * {{{./examples/single-test.html}Running a Single Test}} |
| |
| * {{{./examples/rerun-failing-tests.html}Re-run Failing Tests}} |
| |
| * {{{./examples/class-loading.html}Class Loading and Forking}} |
| |
| * {{{./examples/debugging.html}Debugging Tests}} |
| |
| * {{{./examples/system-properties.html}Using System Properties}} |
| |
| * {{{./examples/configuring-classpath.html}Configuring the Classpath}} |
| |
| * {{{./examples/providers.html}Selecting Providers}} |
| |
| * {{{./examples/fork-options-and-parallel-execution.html}Fork Options and Parallel Test Execution}} |
| |
| * {{{./examples/logging.html}Using Console Logs}} |
| |
| * {{{./examples/shutdown.html}Shutdown of Forked JVM}} |
| |
| * {{{./java9.html}Run tests with Java 9}} |
| |
| * {{{./docker.html}Run tests in Docker}} |
| |
| [] |