Difference between junit-jupiter-api and junit-jupiter-engine Difference between junit-jupiter-api and junit-jupiter-engine java java

Difference between junit-jupiter-api and junit-jupiter-engine


JUnit Prior to Version 5.4

From the docs:

junit-jupiter-api

JUnit Jupiter API for writing tests and extensions.

junit-jupiter-engine

JUnit Jupiter test engine implementation, only required at runtime.

junit-vintage-engine

JUnit Vintage test engine implementation that allows to run vintage JUnit tests, i.e. tests written in the JUnit 3 or JUnit 4 style, on the new JUnit Platform.

So ...

  • You need both junit-jupiter-api and junit-jupiter-engine to write and run JUnit5 tests
  • You only need junit-vintage-engine if (a) you are running with JUnit5 and (b) your test cases use JUnit4 constructs/annotations/rules etc

JUnit from Version 5.4 Onwards

In JUnit 5.4 this is simplified, see this answer for more details.


junit-jupiter aggregator artifact

JUnit 5.4 provides much simpler Maven configuration if your intent is to write JUnit 5 tests. Simply specify the aggregate artifact named junit-jupiter.

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter --><dependency>    <groupId>org.junit.jupiter</groupId>    <artifactId>junit-jupiter</artifactId>    <version>5.8.1</version>    <scope>test</scope></dependency>

As an aggregate, this artifact in turn pulls the following three artifacts automatically, for your convenience:

In your project, you will also end up with:

  • junit-platform-commons-1.4.0.jar
  • junit-platform-engine-1.4.0.jar

The above is what you need to write and run JUnit 5 tests based on the new Jupiter paradigm.

Legacy tests

If your project has JUnit 3 or 4 tests that you want to continue to run, add another dependency for the JUnit Vintage Engine, junit-vintage-engine. See tutorial by IBM.

<!-- https://mvnrepository.com/artifact/org.junit.vintage/junit-vintage-engine --><dependency>    <groupId>org.junit.vintage</groupId>    <artifactId>junit-vintage-engine</artifactId>    <version>5.8.1</version>    <scope>test</scope></dependency>


Just to note, junit-jupiter-api is included as a sub-dependency in junit-jupiter-engine Maven repository. So you'll only really need to add junit-jupiter-engine to get both. I'm sure gradle is the same.https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine/5.1.1