User Tools

Site Tools


tanszek:oktatas:junit5

This is an old revision of the document!


1. A legfontosabb rész:

@Test

Ez mondja meg a JUnitnak, hogy ez egy tesztmetódus. Az assertion: assertEquals(5, result);

azt jelenti: elvárt érték = 5 tényleges érték = result

2. A legfontosabb assertionök Ezeket fogod a legtöbbször használni:

assertEquals(expected, actual);
assertNotEquals(expected, actual);
 
assertTrue(condition);
assertFalse(condition);
 
assertNull(value);
assertNotNull(value);

Például:

@Test
void simpleAssertions() {
 
    assertEquals(4, 2 + 2);
 
    assertTrue(10 > 5);
 
    assertFalse(3 > 10);
 
    String name = "Oliver";
    assertNotNull(name);
}

Nagyon fontos szokás:

assertEquals(expected, actual);

tehát először az elvárt, utána a kapott érték. 3. Több teszt ugyanarra az osztályra Például bővítsük a Calculator osztályt:

public class Calculator {
 
    public int add(int a, int b) {
        return a + b;
    }
 
    public int subtract(int a, int b) {
        return a - b;
    }
 
    public int multiply(int a, int b) {
        return a * b;
    }
}

A teszt:

class CalculatorTest {
 
    @Test
    void additionWorks() {
        Calculator calculator = new Calculator();
 
        assertEquals(5, calculator.add(2, 3));
    }
 
    @Test
    void subtractionWorks() {
        Calculator calculator = new Calculator();
 
        assertEquals(7, calculator.subtract(10, 3));
    }
 
    @Test
    void multiplicationWorks() {
        Calculator calculator = new Calculator();
 
        assertEquals(20, calculator.multiply(4, 5));
    }
}

Mavenből: mvn test

VS Code-ban pedig az egyes @Test metódusok mellett is megjelenhet a Run Test gomb; a Java Test Runner JUnit 5-öt is támogatja. Visual Studio Code 4. @BeforeEach Gyakran ugyanazt az objektumot kell minden teszthez létrehoznunk. Ez:

@Test
void additionWorks() {
    Calculator calculator = new Calculator();
 
    assertEquals(5, calculator.add(2, 3));
}
 
@Test
void subtractionWorks() {
    Calculator calculator = new Calculator();
 
    assertEquals(7, calculator.subtract(10, 3));
}

ismétli ezt:

Calculator calculator = new Calculator();

Erre való a: @BeforeEach

Például:

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
 
import static org.junit.jupiter.api.Assertions.assertEquals;
 
class CalculatorTest {
 
    private Calculator calculator;
 
    @BeforeEach
    void setUp() {
        calculator = new Calculator();
    }
 
    @Test
    void additionWorks() {
        assertEquals(5, calculator.add(2, 3));
    }
 
    @Test
    void subtractionWorks() {
        assertEquals(7, calculator.subtract(10, 3));
    }
}

A setUp() minden egyes teszt előtt lefut. Tehát: @BeforeEach → @Test #1 @BeforeEach → @Test #2 @BeforeEach → @Test #3

Ez nagyon fontos unit testing minta. 5. @BeforeAll és @AfterAll Van olyan inicializáció, amit csak egyszer akarunk lefuttatni.

@BeforeAll
static void beforeAllTests() {
    System.out.println("Tests starting...");
}

és a végén:

@AfterAll
static void afterAllTests() {
    System.out.println("Tests finished.");
}

Teljes példa:

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
 
class ExampleTest {
 
    @BeforeAll
    static void beforeAll() {
        System.out.println("START");
    }
 
    @Test
    void testOne() {
        System.out.println("testOne");
    }
 
    @Test
    void testTwo() {
        System.out.println("testTwo");
    }
 
    @AfterAll
    static void afterAll() {
        System.out.println("END");
    }
}

6. Kivételek tesztelése: assertThrows Ez különösen fontos. Tegyük fel, hogy van osztás: public int divide(int a, int b) {

  if (b == 0) {
      throw new IllegalArgumentException("Division by zero");
  }
  return a / b;

}

Azt szeretnénk tesztelni, hogy nullával osztás esetén valóban kivételt kapunk: @Test void divisionByZeroThrowsException() {

  Calculator calculator = new Calculator();
  assertThrows(
      IllegalArgumentException.class,
      () -> calculator.divide(10, 0)
  );

}

Ez nagyon tipikus JUnit 5 kód. Még jobb: @Test void divisionByZeroThrowsException() {

  IllegalArgumentException exception =
      assertThrows(
          IllegalArgumentException.class,
          () -> calculator.divide(10, 0)
      );
  assertEquals(
      "Division by zero",
      exception.getMessage()
  );

}

Itt már nemcsak azt ellenőrizzük, hogy volt exception, hanem az üzenetét is. 7. assertAll Több dolgot egyszerre is ellenőrizhetsz: @Test void severalAssertions() {

  int result = 10;
  assertAll(
      () -> assertTrue(result > 0),
      () -> assertTrue(result < 100),
      () -> assertEquals(10, result)
  );

}

Előnye, hogy a JUnit megpróbálja az összes assertiont kiértékelni. 8. @DisplayName Olvasható nevet adhatsz a tesztnek: import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test;

class CalculatorTest {

  @Test
  @DisplayName("2 + 3 eredménye 5")
  void additionWorks() {
      Calculator calculator = new Calculator();
      assertEquals(5, calculator.add(2, 3));
  }

}

A VS Code Testing nézetében így sokkal érthetőbb lehet a teszt. 9. @Disabled Ideiglenesen kikapcsolhatsz egy tesztet: import org.junit.jupiter.api.Disabled;

@Test @Disabled void unfinishedTest() {

  // még nincs kész

}

Vagy indoklással: @Disabled(“A funkció még nincs implementálva”)

10. Paraméterezett tesztek Ez a JUnit 5 egyik nagyon hasznos funkciója. Tegyük fel, hogy ezt akarjuk tesztelni: calculator.add(…)

Nem akarunk öt külön tesztet írni: assertEquals(3, calculator.add(1, 2)); assertEquals(7, calculator.add(3, 4)); assertEquals(0, calculator.add(-1, 1));

Használhatunk @ParameterizedTest-et: import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource;

import static org.junit.jupiter.api.Assertions.assertEquals;

class CalculatorTest {

  private final Calculator calculator = new Calculator();
  @ParameterizedTest
  @CsvSource({
      "1, 2, 3",
      "3, 4, 7",
      "-1, 1, 0",
      "10, 20, 30"
  })
  void additionWorks(
          int a,
          int b,
          int expected) {
      assertEquals(
          expected,
          calculator.add(a, b)
      );
  }

}

Ez gyakorlatilag négyszer futtatja ugyanazt a tesztet különböző adatokkal. 11. @ValueSource Egyszerű paraméterlistához: @ParameterizedTest @ValueSource(ints = {1, 2, 3, 10, 100}) void positiveNumbersArePositive(int number) {

  assertTrue(number > 0);

}

12. Jó teszt felépítése: Arrange – Act – Assert Ezt érdemes megszokni. @Test void additionWorks() {

  // Arrange
  Calculator calculator = new Calculator();
  // Act
  int result = calculator.add(2, 3);
  // Assert
  assertEquals(5, result);

}

A három rész: Arrange ↓ előkészítjük a tesztet

Act ↓ meghívjuk a tesztelendő kódot

Assert ↓ ellenőrizzük az eredményt

Ez az egyik legfontosabb unit testing gondolkodásmód.

tanszek/oktatas/junit5.1790849392.txt.gz · Last modified: by superuser