In my case, it appears that all I had to do after adding the correct junit-bom version import before the import of the "spring-boot-dependencies" bom was figure out where to exclude junit-platform-runner. I can see where the junit-{platform,jupiter} dependencies are in the tree, but it's a little harder to tell what bom they came from (is that one of the points about a recent discussion about improvements to dependency:tree?)
On Sat, Jun 18, 2022 at 3:03 AM Karl Heinz Marbaise <khmarba...@gmx.de> wrote: > Hi, > > > On 17.06.22 20:46, David Karr wrote: > > Ok, what is the proper way to do that, considering I have the following > in > > a bom imported by my parent pom: > > -------------------- > > <dependency> > > <groupId>org.junit</groupId> > > <artifactId>junit-bom</artifactId> > > <scope>import</scope> > > <type>pom</type> > > <version>5.8.2</version> > > </dependency> > > <!-- Spring Dependencies --> > > <dependency> > > <groupId>org.springframework.boot</groupId> > > <artifactId>spring-boot-dependencies</artifactId> > > <version>${spring-boot.version}</version> > > <type>pom</type> > > <scope>import</scope> > > </dependency> > > -------------------- > > Do I add an exclusion to one or both of these? > > > This is to have the available dependencies. > You have to add junit-jupiter-engine > > like this (not inside dependencyManagement): > > > <dependencies> > <dependency> > <groupId>org.junit.jupiter</groupId> > <artifactId>junit-jupiter-engine</artifactId> > <scope>test</scope> > </dependency> > <dependency> > <groupId>org.springframework.boot</groupId> > <artifactId>spring-boot-starter-test</artifactId> > <scope>test</scope> > </dependency> > > > If you have a mix of JUNit 4 and JUnit 5 you have to go this way: > > <dependencies> > <dependency> > <groupId>org.junit.jupiter</groupId> > <artifactId>junit-jupiter-engine</artifactId> > <scope>test</scope> > </dependency> > <dependency> > <groupId>org.junit.vintage</groupId> > <artifactId>junit-vintage-engine</artifactId> > <scope>test</scope> > </dependency> > <dependency> > <groupId>org.springframework.boot</groupId> > <artifactId>spring-boot-starter-test</artifactId> > <scope>test</scope> > </dependency> > > The vintage-engine is responsible for executing the JUnit 4 tests. > > > I have made an simple example with Spring Boot using JUnit 4 and JUnit 5. > > Also added exemplary integration tests where one is JUnit 4 based and > one JUnit 5 based. > > https://github.com/khmarbaise/minimal-junit4-junit5 > > > Furthermore you shouldn't define the provider for surefire explicit > because it's identifying it itself. (In the given example I have not > defined the provider). > > > Kind regards > Karl Heinz Marbaise > > > > On Fri, Jun 17, 2022 at 11:37 AM Slawomir Jaranowski < > s.jaranow...@gmail.com> > > wrote: > > > >> Do you have on your classpath - junit-platform-runner? > >> Please remove it. > >> > >> > >> pt., 17 cze 2022 o 20:23 David Karr <davidmichaelk...@gmail.com> > >> napisał(a): > >> > >>> I'm posting a new note, as this might be a different issue. > >>> > >>> I recently got good advice on this list about how to properly specify > the > >>> version overrides for the junit-bom artifacts. When I implemented > that, > >> I > >>> saw that I was consistently getting the correct versions for those > >>> artifacts. > >>> > >>> However, I'm now confused by the behavior that I'm seeing from > >> Surefire. I > >>> currently have a mix of JUnit 4 and JUnit 5 tests. I'm pretty sure > that > >> I > >>> had this working before, but now I see that it is not running any of > the > >>> JUnit 5 tests. > >>> > >>> Note the following excerpt from my build: > >>> ------------------- > >>> [INFO] --- maven-surefire-plugin:3.0.0-M7:test (default-test) @ > >>> PlatformPilotMs --- > >>> [INFO] Using auto detected provider > >>> org.apache.maven.surefire.junit4.JUnit4Provider > >>> ------------------ > >>> > >>> I'm using the very latest M version, as that resolves other issues > we've > >>> been having. When I look to see what tests were executed, I see that it > >>> doesn't include any of my JUnit 5 tests. > >>> > >>> I ran "mvn dependency:tree" to verify what versions of JUnit are in the > >>> classpath, and it has BOTH JUnit 4.13 and junit-platform 1.8.2 and > >>> junit-jupiter 5.8.2. The surefire doc page says "Surefire normally > >>> automatically selects which test-framework provider to use based on the > >>> version of TestNG/JUnit present in your project's classpath". Is the > fact > >>> that both are in the classpath causing this? Am I going to have to > >> manually > >>> specify both the junit 4 and junit 5 providers in the surefire > >>> dependencies? That is additionally annoying as I also have to > redundantly > >>> specify the versions of those artifacts (I tried not specifying a > >> version, > >>> and it complained). > >>> > >> > >> > >> -- > >> Sławomir Jaranowski > >> > > > >