'Y'

JUnit 5 Architecture. Part 2

The second part of our article series on Junit 5 Architecture. This time we look at JUnit 5 Jupiter, JUnit 5 Vintage and more.

The second part of our article series on Junit 5 Architecture. This time we look at JUnit 5 Jupiter, JUnit 5 Vintage and more.


3. JUnit 5 Jupiter


JUnit Jupiter is the combination of the new programming model (annotations, classes, methods) and extension model for writing tests and extensions in JUnit 5. The Jupiter sub-project provides a TestEngine for running Jupiter based tests on the platform. In contrast to the previously existing runners and rules extension points in JUnit 4, the JUnit Jupiter extension model consists of a single, coherent concept: the Extension API.
The artifacts contained into the JUnit Jupiter are:

  • junit-jupiter-api, the JUnit Jupiter API for writing tests and extensions.
  • junit-jupiter-engine, the JUnit Jupiter test engine implementation, only required at runtime.
  • junit-jupiter-params, which provides support for parameterized tests in JUnit Jupiter.
  • junit-jupiter-migrationsupport, which provides migration support from JUnit 4 to JUnit Jupiter, and its required only for running selected JUnit 4 rules.


4. JUnit 5 Vintage


JUnit Vintage provides a TestEngine for running JUnit 3 and JUnit 4 based tests on the platform. JUnit 5 Vintage only contains junit-vintage-engine, the engine implementation to execute tests written in JUnit 3 or 4. For this you also need the JUnit 3 or 4 JARs.

This is useful in order to interact with the old tests through JUnit 5. Its likely that you may need to work on your projects with JUnit 5, but still support many old tests. JUnit 5 Vintage is the solution for this situation!


5. The big picture of the JUnit 5 architecture


To put everything head to head and show how the full architecture works, well say that JUnit Platform provides the facilities to run different kinds of tests: JUnit 5 tests, old JUnit 3 and 4 tests, third-party tests (figure 2).

big picture JUnit 5 architecture.png

Figure 2 The big picture of the JUnit 5 architecture.



In more detail (figure 3):

  • The test APIs provide the facilities for different test engines: junit-jupiter-api for JUnit 5 tests; junit-4.12 for legacy tests; custom engines for third-party tests.
  • The test engines mentioned above are created by extending the junit-platform-engine public API, part of the JUnit 5 Platform.
  • The junit-platform-launcher public API provide the facilities to discover tests inside the JUnit 5 Platform, for build tools like Maven or Gradle or for IDEs.

detailed picture JUnit 5 architecture.png

Figure 3 The detailed picture of the JUnit 5 architecture.


Besides the modular architecture, JUnit 5 also provides the extensions mechanism.

We underline the fact that the architecture of a system strongly determines its capabilities and its behavior. Understanding the architecture of both JUnit 4 and JUnit 5 helps you easily apply their capabilities in practice, write efficient tests, and analyze the implementation alternatives. They help you fasten the pace at which you gain the skills of a programmer who masters unit testing.

Interested in Java? Check out our trainings.



Catalin Tudose
Java and Web Technologies Expert

Share the knowledge

Luxoft Warsaw - Warsaw Spire, plac Europejski 1, 00-844 Warszawa
Dimitrie Pompeiu nr 5-7 , building C, Et. 5, sect 2, Bucharest, 014459

Contact phone:

021 371 4858
Luxoft Poland Wroclaw - Silver Tower pl. Konstytucji 3-go Maja 3 50-048 Wroclaw
Aleja Generała Tadeusza Bora-Komorowskiego 25, Quattro Business Park Five, 31-476 Kraków, Poland

Contact phone:

+48 122110650
Success
Thank you.
Your request has been received.