BT

Your opinion matters! Please fill in the InfoQ Survey!

JUnit 5 Released

| by Amit K Gupta Follow 4 Followers on Oct 24, 2017. Estimated reading time: 2 minutes |

JUnit 5 has just been released. This is the first major release since JUnit 4, which was released in 2006. According to the user guide, one of the major goals of JUnit 5 is to make future enhancements and evolution of JUnit easier.

With JUnit 4 a lot of stuff that was originally added as an internal construct only got used by external extension writers and tool builders. That made changing JUnit 4 especially difficult and sometimes impossible.

JUnit 5 team addressed this issue by redesigning the testing framework and dividing it into two main areas:

  1. A set of API for writing tests.
  2. JUnit platform launcher API that can be used by tool builders to discover, filter, and execute tests.

JUnit 5 is a collection of three sub-projects: JUnit Jupiter, JUnit Platform and JUnit Vintage (for backwards compatibility).

JUnit Jupiter provides the API for writing tests and extensions. It consists of some familiar annotations from JUnit 4 such as @Test, and some new annotations such as @DisplayName. Some annotations are renamed.

JUnit 5 JUnit 4
@BeforeEach @Before
@AfterEach @After
@BeforeAll @BeforeClass
@AfterAll @AfterClass
@Disabled @Ignore

Consult the user guide for a complete list of annotations available in JUnit 5.

JUnit 5 includes new assertions such as assertAll that work well with Java 8 lambdas.

public class SampleTest { 
  @Test
    void groupedAssertions() {
        // In a grouped assertion all assertions are executed, and any
        // failures will be reported together.
        assertAll("person",
            () -> assertEquals("John", person.getFirstName()),
            () -> assertEquals("Doe", person.getLastName())
        );
    }
}

JUnit 5 also introduces the concept of nested tests, which allows the developer to group related tests.

The extension model of JUnit 5 replaces Runner, @Rule, and @ClassRule extension points in JUnit 4 with a single Extension API. Extensions can be registered explicitly by using @ExtendWith or automatically via Java's ServiceLoader mechanism.

@ExtendWith(MockitoExtension.class)
@Test
void mockTest() {
    // ...
}

JUnit Platform provides the foundation for discovering, filtering, and executing tests.

From the user guide:

One of the prominent goals of JUnit 5 is to make the interface between JUnit and its programmatic clients – build tools and IDEs – more powerful and stable. The purpose is to decouple the internals of discovering and executing tests from all the filtering and configuration that's necessary from the outside.

This goal is met by JUnit's Launcher API, which is typically used by IDEs and build tools for configuring and launching test plans. A third-party test library can also plug into JUnit Platform's launching infrastructure by providing a custom TestEngine.

ConsoleLauncher, a command-line Java application lets the developer launch the JUnit Platform from the console.

JUnit Vintage is a test engine that allows a developer to run tests written in JUnit 3 or JUnit 4, on the new platform. A developer must include junit-vintage-engine in the test runtime path, in which case the legacy tests will automatically be picked up by the JUnit Platform launcher.

This release requires Java 8 (or higher) at runtime, underlining the trend where modern versions of major libraries now consider Java 8 a minimum version requirement.

JUnit 5 is one of the first projects to be released under EPL v2.0 license.

Rate this Article

Adoption Stage
Style

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Discuss

Login to InfoQ to interact with what matters most to you.


Recover your password...

Follow

Follow your favorite topics and editors

Quick overview of most important highlights in the industry and on the site.

Like

More signal, less noise

Build your own feed by choosing topics you want to read about and editors you want to hear from.

Notifications

Stay up-to-date

Set up your notifications and don't miss out on content that matters to you

BT