This is an automated email from the ASF dual-hosted git repository. tibordigana pushed a commit to branch SUREFIRE-1787 in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
The following commit(s) were added to refs/heads/SUREFIRE-1787 by this push: new f5f41a8 new integration tests and documentation f5f41a8 is described below commit f5f41a87890996f9b4a1adedaac83df9003b648f Author: tibordigana <tibordig...@apache.org> AuthorDate: Mon May 11 00:13:31 2020 +0200 new integration tests and documentation --- .../src/site/apt/examples/junit-platform.apt.vm | 241 ++++++++++++++++++++- .../surefire/its/jiras/Surefire1787JUnit5IT.java | 30 +++ surefire-its/src/test/resources/junit-4-5/pom.xml | 19 ++ .../src/test/resources/junit5-runner/pom.xml | 22 +- .../src/test/resources/junit5-testng/pom.xml | 26 ++- 5 files changed, 329 insertions(+), 9 deletions(-) diff --git a/maven-surefire-plugin/src/site/apt/examples/junit-platform.apt.vm b/maven-surefire-plugin/src/site/apt/examples/junit-platform.apt.vm index d2d49fc..ef5c014 100644 --- a/maven-surefire-plugin/src/site/apt/examples/junit-platform.apt.vm +++ b/maven-surefire-plugin/src/site/apt/examples/junit-platform.apt.vm @@ -74,12 +74,25 @@ Using JUnit 5 Platform see the {{{https://junit.org/junit5/}JUnit 5 web site}} and the {{{https://junit.org/junit5/docs/current/user-guide/}JUnit 5 User Guide}}. -* Smart Resolution of Jupiter Engine and Vintage Engine for JUnit4 (since plugin version 3.0.0-M4) +* Smart Resolution of Jupiter Engine and Vintage Engine for JUnit4 - JUnit5 API artifact and your test sources become isolated from engine. + JUnit5 API artifact and your test sources become isolated from engine. In these chapters you will see how you can + segregate, combine, select the APIs and Engines miscellaneous way. You can find integration tests + {{{https://github.com/apache/maven-surefire/tree/master/surefire-its/src/test/resources/junit-4-5}with JUnit4/5}}, + {{{https://github.com/apache/maven-surefire/tree/master/surefire-its/src/test/resources/junit5-testng}with JUnit5/TestNG}} + and {{{https://github.com/apache/maven-surefire/tree/master/surefire-its/src/test/resources/junit5-runner}with the JUnit4 Runner for Jupiter tests}}. + (See the Maven profiles.) - Normally the developer does not want to access internal classes of JUnit5 engine (e.g. <<<5.4.0>>>). In this example - the POM has only Jupiter API dependency in test classpath. +** How to run only one API + + Normally, the developer does not want to access internal classes of JUnit5 engine (e.g. <<<5.4.0>>>). + In the next chapters you can find your way to use the Jupiter or JUnit5 API where the plugin would resolve the engine. + +*** Jupiter API in test dependencies + + In this example the POM has only Jupiter API dependency in test classpath. The plugin will resolve and download + the <<<junit-jupiter-engine>>> with the version related to the version of <<<junit-jupiter-api>>>. Similar principles + can be found in the following chapters as well. +---+ <dependencies> @@ -108,6 +121,8 @@ Using JUnit 5 Platform ... +---+ +*** API-Engine versions segregation + In the following example the engine artifact appears in plugin dependencies and the engine is resolved by the plugin and downloaded from a remote repository for plugins. You may want to update the version of engine with fixed bugs in <<<5.3.2>>> but the API version <<<5.3.0>>> stays intact! @@ -145,8 +160,11 @@ Using JUnit 5 Platform ... +---+ +*** JUnit4 API in test dependencies - Similar with JUnit4 in test dependencies of your project POM. The Vintage engine artifact is in plugin dependencies. + This is similar example with JUnit4 in test dependencies of your project POM. + The Vintage engine artifact has to be in the plugin dependencies; otherwise the plugin would use + <<<surefire-junit4>>> provider instead of the <<<surefire-junit-platform>>> provider. +---+ <dependencies> @@ -180,6 +198,219 @@ Using JUnit 5 Platform ... +---+ +** How to run multiple APIs or Engines + + In the following example you can use both JUnit4 and JUnit5 tests. + +*** Jupiter API and JUnit4 + + Once you define any JUnit5 API in the dependencies, the provider <<<surefire-junit-platform>>> is selected and + you can always add the JUnit4 dependency. + ++---+ +<dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-api</artifactId> + <version>5.6.2</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.13</version> + <scope>test</scope> + </dependency> +</dependencies> ++---+ + +*** Jupiter API and Vintage Engine + ++---+ +<dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-api</artifactId> + <version>5.6.2</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.junit.vintage</groupId> + <artifactId>junit-vintage-engine</artifactId> + <version>5.6.2</version> + <scope>test</scope> + </dependency> +</dependencies> ++---+ + +*** Jupiter and Vintage Engine + ++---+ +<dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <version>5.6.2</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.junit.vintage</groupId> + <artifactId>junit-vintage-engine</artifactId> + <version>5.6.2</version> + <scope>test</scope> + </dependency> +</dependencies> ++---+ + +** Select engine and use multiple APIs + + In these examples you use both API, i.e. Jupiter and JUnit4, in the test dependencies but you want to select + the engine via plugin dependencies. + +*** Select Jupiter + + Here your tests import the packages from JUnit4 and Jupiter but you want to select only one Maven profile + with JUnit4 tests. + ++---+ +<dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-api</artifactId> + <version>5.6.2</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.13</version> + <scope>test</scope> + </dependency> +</dependencies> +<profile> + <id>select-junit5</id> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <version>5.6.2</version> + </dependency> + </dependencies> + </plugin> + </plugins> + </build> +</profile> ++---+ + +*** Select JUnit4 + + Here your tests import the packages from JUnit4 and Jupiter but you want to select only one Maven profile + with Jupiter tests. + ++---+ +<dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-api</artifactId> + <version>5.6.2</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.13</version> + <scope>test</scope> + </dependency> +</dependencies> +<profile> + <id>select-junit4</id> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <dependencies> + <dependency> + <groupId>org.junit.vintage</groupId> + <artifactId>junit-vintage-engine</artifactId> + <version>5.6.2</version> + </dependency> + </dependencies> + </plugin> + </plugins> + </build> +</profile> ++---+ + +** How to run TestNG tests within Jupiter engine + + You can run TestNG tests combined with JUnit5 tests. + + For more information see this + {{{https://github.com/apache/maven-surefire/tree/master/surefire-its/src/test/resources/junit5-testng}example}}. + ++---+ +<dependencies> + <dependency> + <groupId>org.testng</groupId> + <artifactId>testng</artifactId> + <version>7.1.0</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>com.github.testng-team</groupId> + <artifactId>testng-junit5</artifactId> + <version>0.0.1</version> + <scope>test</scope> + <exclusions> + <exclusion> + <groupId>org.junit.platform</groupId> + <artifactId>junit-platform-engine</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-api</artifactId> + <version>5.6.2</version> + <scope>test</scope> + </dependency> +</dependencies> ++---+ + + The Maven does not take any responsibility for broken compatibilities in this case and the responsibility for + the dependency <<<com.github.testng-team:testng-junit5>>>. + +** JUnit Runner + + The JUnit4 library has the {{{https://junit.org/junit4/javadoc/latest/src-html/org/junit/runner/Runner.html}Runner}} + implemented in the JUnit5's artifact <<<junit-platform-runner>>>. + + For more information see this + {{{https://github.com/apache/maven-surefire/tree/master/surefire-its/src/test/resources/junit5-runner}example}}. + ++---+ +<dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <version>5.6.2</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.junit.platform</groupId> + <artifactId>junit-platform-runner</artifactId> + <version>1.6.2</version> + <scope>test</scope> + </dependency> +</dependencies> ++---+ + * Provider Selection If nothing is configured, Surefire detects which JUnit version to use by the following algorithm: diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1787JUnit5IT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1787JUnit5IT.java index 0423993..eab5733 100644 --- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1787JUnit5IT.java +++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1787JUnit5IT.java @@ -79,4 +79,34 @@ public class Surefire1787JUnit5IT extends SurefireJUnit4IntegrationTestCase .verifyErrorFree( 1 ) .verifyTextInLog( "Running pkg.JUnit5Test" ); } + + @Test + public void testNgWithJupiterApi() + { + unpack( "junit5-testng" ) + .activateProfile( "junit5-api" ) + .executeTest() + .verifyErrorFree( 2 ) + .verifyTextInLog( "Running pkg.JUnit5Test" ) + .verifyTextInLog( "Running pkg.TestNGTest" ); + } + + @Test + public void testNgWithJupiterEngine() + { + unpack( "junit5-testng" ) + .activateProfile( "junit5-engine" ) + .executeTest() + .verifyErrorFree( 2 ) + .verifyTextInLog( "Running pkg.JUnit5Test" ) + .verifyTextInLog( "Running pkg.TestNGTest" ); + } + + @Test + public void junit4Runner() + { + unpack( "junit5-runner" ) + .executeTest() + .verifyErrorFreeLog(); + } } diff --git a/surefire-its/src/test/resources/junit-4-5/pom.xml b/surefire-its/src/test/resources/junit-4-5/pom.xml index 546b8fc..5f6a5a4 100644 --- a/surefire-its/src/test/resources/junit-4-5/pom.xml +++ b/surefire-its/src/test/resources/junit-4-5/pom.xml @@ -1,4 +1,23 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ 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. + --> + <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> diff --git a/surefire-its/src/test/resources/junit5-runner/pom.xml b/surefire-its/src/test/resources/junit5-runner/pom.xml index a8eff6c..64a1bf6 100644 --- a/surefire-its/src/test/resources/junit5-runner/pom.xml +++ b/surefire-its/src/test/resources/junit5-runner/pom.xml @@ -1,4 +1,23 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ 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. + --> + <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> @@ -9,6 +28,7 @@ <version>1.0-SNAPSHOT</version> <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.testSource>1.8</maven.compiler.testSource> <maven.compiler.testTarget>1.8</maven.compiler.testTarget> </properties> @@ -34,7 +54,7 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> - <version>3.0.0-SNAPSHOT</version> + <version>${surefire.version}</version> <configuration> <test>JUnit5Tests</test> </configuration> diff --git a/surefire-its/src/test/resources/junit5-testng/pom.xml b/surefire-its/src/test/resources/junit5-testng/pom.xml index 6bf6829..bc61240 100644 --- a/surefire-its/src/test/resources/junit5-testng/pom.xml +++ b/surefire-its/src/test/resources/junit5-testng/pom.xml @@ -1,4 +1,23 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ 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. + --> + <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> @@ -9,6 +28,7 @@ <version>1.0-SNAPSHOT</version> <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.testSource>1.8</maven.compiler.testSource> <maven.compiler.testTarget>1.8</maven.compiler.testTarget> </properties> @@ -40,7 +60,7 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> - <version>3.0.0-SNAPSHOT</version> + <version>${surefire.version}</version> </plugin> </plugins> </pluginManagement> @@ -48,7 +68,7 @@ <profiles> <profile> - <id>both-engines</id> + <id>junit5-engine</id> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> @@ -59,7 +79,7 @@ </dependencies> </profile> <profile> - <id>both-api</id> + <id>junit5-api</id> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId>