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
> >>
> >
>
>

Reply via email to