Junit 5 kommer med parametriserede tests

Illustration: Ian Alexander/Wikipedia
Mange godter i ny udgave af det populære testmiljø til Java.

Efter to års arbejde er en ny udgave af open source Java-testmiljøet Junit kommet til verden.

Junit benyttes til at skrive unittests, eller modultests, som er kode, der tester en specifik facilitet i et program.

Oftest udmøntes det i en test, hvor en given metode i et program udføres med en kombination af parametre som er henholdvis typiske, ekstreme og ugyldige. Dernæst tjekkes adfærden med en række assert-sætninger. Tests samles i såkaldte test-suiter, og kan udføres hver gang, programmøren ændrer i koden. På den måde kan det hurtigt ses om programmet har ændret adfærd.

Blandt de mange nyheder i version fem er parametriserede tests. Det kan se sådan ud:

@ParameterizedTest
@ValueSource(strings = { "Hello", "World" })
void testWithStringParameter(String argument) {
    assertNotNull(argument);
}

Her afvikles testWithStringParameter-metoden med de to strenge, som er angivet i annotationen @ValueSource.

Det er nu også muligt at afvikle flere tests i et hug, noget, som tidligere er blevet frarådet. Med den nye facilitet afvikles alle tests, også selvom en eller flere fejler.

@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())
        );
}

Det er nu også muligt at indlejre flere tests. Det sker med @Nested-annotationen, som giver mulighed for at gruppere tests i indre klasser:

@DisplayName("A stack")
class TestingAStackDemo {
 
    Stack<Object> stack;
 
    @Test
    @DisplayName("is instantiated with new Stack()")
    void isInstantiatedWithNew() {
        new Stack<>();
    }
 
    @Nested
    @DisplayName("when new")
    class WhenNew {
 
            @Test
            @DisplayName("it is no longer empty")
            void isNotEmpty() {
                assertFalse(stack.isEmpty());
            }
 
            @Test
            @DisplayName("returns the element when popped and is empty")
            void returnElementWhenPopped() {
                assertEquals(anElement, stack.pop());
                assertTrue(stack.isEmpty());
            }
 
            ...

Junit har også fået et API til udvidelser. Disse udvidelser kan tilføjes med annotationen @ExtendWith.

En specifik udvidelse, som kommer med som standard i biblioteket, er betingelser (conditions), som evaluerer om en given test skal udføres.

Eksemplerne her i artiklen er fra Junits brugerguide, hvor der er mere information om nyhederne.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (1)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Log ind eller Opret konto for at kommentere