Junit 5 kommer med parametriserede tests

Lus
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)

Kommentarer (1)
Log ind eller opret en konto for at skrive kommentarer

Pressemeddelelser

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

Affecto has the solution and the tools you need

According to GDPR, you are required to be in control of all of your personally identifiable and sensitive data. There are only a few software tools on the market to support this requirement today.
13. sep 2017

Xena - an innovative force in testing next-generation communications technology

22. aug 2017