0

pom.xml:

...
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-runner</artifactId>
    <version>1.7.0-M1</version>
    <scope>test</scope>
</dependency>
...

In <build> only is used:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

Not in use in <build> are the plugins maven-surefire-plugin and maven-compiler-plugin

There are a few test classes (MyTest1Test, MyTest2Test, etc.), testing REST controllers. Some test methods are tagged with "myTag", to be included in a test suite, like:

@SpringBootTest
@AutoConfigureMockMvc
public class MyTest1Test {
...
    @Test
    @WithMockUser
    public void test1() {...}

    @Test
    @WithMockUser
    @Tag("myTag")
    public void test2() {...}
...
}

Also there is a test suite, defined like:

@RunWith(JUnitPlatform.class)
@SelectClasses({MyTest1Test.class, MyTest3Test.class})
@IncludeTags({"myTag"})
public class MyTestSuiteTest {
...
}

When I select Maven > test, all test classes are run, only the test suite is not run. Why not? What kind of configuration has to be done?

When I run the test suite itself by right-click > Run 'MyTestSuiteTest' within the test class, it is run correctly.

Trying replacing @RunWith(JUnitPlatform.class with @ExtendWith(SpringExtension.class) doesn't solve it. Maven > "test" doesn't run the test suite, and worth, trying to run the test suite with IDE (right-click on the class > Run 'MyTestSuiteTest") shows and error:

org.junit.runners.model.InvalidTestClassError: Invalid test class '...MyTestSuiteTest':
  1. No runnable methods

    at org.junit.runners.ParentRunner.validate(ParentRunner.java:525)
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:102)
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:84)
    at org.junit.runners.JUnit4.<init>(JUnit4.java:23)
    at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:70)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:37)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:70)
    at org.junit.internal.requests.ClassRequest.createRunner(ClassRequest.java:28)
    at org.junit.internal.requests.MemoizingRequest.getRunner(MemoizingRequest.java:19)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:49)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)

The IDE tries to run the test suite with JUnit 4, but why? Because of @SelectClasses, @IncludeTags? I have to include the dependency

<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-runner</artifactId>
    <version>1.7.0-M1</version>
    <scope>test</scope>
</dependency>

to be able to use @SelectClasses and @IncludeTags, but also I excluded the vintage engine. Btw, do I have to remove the exclusion of vintage engine, if running a test suite with @RunWith?

Observation: Including vintage engine: Using @RunWith, Maven > "test", shows the following in the console output:

org.junit.vintage.engine.discovery.DefensiveAllDefaultPossibilitiesBuilder$DefensiveAnnotatedBuilder buildRunner
    WARNING: Ignoring test class using JUnitPlatform runner: ....MyTestSuiteTest

Running the test suite directly with right-click > Run 'MyTestSuiteTest" via IDE shows an additional entry in the unit test view:

MyTestSuiteTest
   JUnit Jupiter
      MyTest1Test
         test2
      MyTest3Test
         test1
   JUnit Vintage
      <no name>

Although there are just two annotated methods to run with the test suite (one from MyTest1Test class, and one from MyTest3Test class), it says 3 test were run successfully. JUnit Vintage didn't show up before when vintage engine was exluded.

Using @ExtendWith with vintage engine included: Maven > "test" doesn't run the test suite, no warning or similar in the console output. "right-click > Run 'MyTestSuiteTest" gives the reported error.

Excluding vintage engine: @RunWith behaves as described initially in the question. @ExtendWith Maven > "test" doesn't run the test suite, no warning or similar in the console output. "right-click > Run 'MyTestSuiteTest" gives the reported error.

neblaz
  • 683
  • 10
  • 32
  • Why do you have this dependency? "junit-platform-runner" – Simon Martinelli Jun 22 '20 at 12:36
  • That was the only way to use '@RunWith', '@SelectClasses', '@IncludeTags and 'JUnitPlatform'. They were not available otherwise. – neblaz Jun 22 '20 at 12:40
  • From my understanding, in JUnit 5 there is no other way to use a test suite as with '@RunWith'. – neblaz Jun 22 '20 at 12:41
  • Does this answer your question? [running test suite is not working in junit5 through maven](https://stackoverflow.com/questions/42392512/running-test-suite-is-not-working-in-junit5-through-maven) – Simon Martinelli Jun 22 '20 at 13:03
  • No, because I have a Spring Boot applicatiion. I use the starter dependency for test ('spring-boot-starter-test'), which includes JUnit 5, and I explicitly exclude the vintage engine, which is similar to what that post does. Also I include the dependency junit-platform-runner, which that post also does. The plugin spring-boot-maven-plugin, as of my knowledge, has surfire and compiler within. In fact, my setup has everything like the post you suggested, still the difference is, I have a Spring Boot setup, that post does not. – neblaz Jun 23 '20 at 07:37

0 Answers0