Junit 5 kommer med parametriserede tests

1 kommentar.  Hop til debatten
Junit 5 kommer med parametriserede tests
Illustration: Ian Alexander/Wikipedia.
Mange godter i ny udgave af det populære testmiljø til Java.
12. september 2017 kl. 10:11
errorÆldre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

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:

  1. @ParameterizedTest
  2. @ValueSource(strings = { "Hello", "World" })
  3. void testWithStringParameter(String argument) {
  4. assertNotNull(argument);
  5. }

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

Artiklen fortsætter efter annoncen

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.

  1. @Test
  2. void groupedAssertions() {
  3. // In a grouped assertion all assertions are executed, and any
  4. // failures will be reported together.
  5. assertAll("person",
  6. () -> assertEquals("John", person.getFirstName()),
  7. () -> assertEquals("Doe", person.getLastName())
  8. );
  9. }

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

  1. @DisplayName("A stack")
  2. class TestingAStackDemo {
  3.  
  4. Stack<Object> stack;
  5.  
  6. @Test
  7. @DisplayName("is instantiated with new Stack()")
  8. void isInstantiatedWithNew() {
  9. new Stack<>();
  10. }
  11.  
  12. @Nested
  13. @DisplayName("when new")
  14. class WhenNew {
  15.  
  16. @Test
  17. @DisplayName("it is no longer empty")
  18. void isNotEmpty() {
  19. assertFalse(stack.isEmpty());
  20. }
  21.  
  22. @Test
  23. @DisplayName("returns the element when popped and is empty")
  24. void returnElementWhenPopped() {
  25. assertEquals(anElement, stack.pop());
  26. assertTrue(stack.isEmpty());
  27. }
  28.  
  29. ...

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.

Artiklen fortsætter efter annoncen

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

1 kommentar.  Hop til debatten
Debatten
Log ind for at deltage i debatten.
settingsDebatindstillinger