Junit 5 kommer med parametriserede tests

Foto: 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
Kommentarer (1)
Log ind eller Opret konto for at kommentere
Pressemeddelelser

Welcome to the Cloud Integration Enablement Day (Bring your own laptop)

On this track, we will give you the chance to become a "Cloud First" data integration specialist.
15. nov 2017

Silicom i Søborg har fået stærk vind i sejlene…

Silicom Denmark arbejder med cutting-edge teknologier og er helt fremme hvad angår FPGA teknologien, som har eksisteret i over 20 år.
22. sep 2017

Conference: How AI and Machine Learning can accelerate your business growth

Can Artificial Intelligence (AI) and Machine Learning bring actual value to your business? Will it supercharge growth? How do other businesses leverage AI and Machine Learning?
13. sep 2017