javajunitjunit5

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


What's the difference between maven modules junit-jupiter-api and junit-jupiter-engine? Is it necessary to include both dependencies in build.gradle?

Do I need to provide both dependencies?

testCompile("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
testCompile("org.junit.jupiter:junit-jupiter-api:${junitVersion}")

Or only one dependency is enough?

testCompile("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")

And do I need to add a dependency on junit-vintage-engine?


Solution

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

    JUnit from Version 5.4 Onwards

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