[[oktatas:programozás|< Programozás]]
====== Egységtesztelés ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2021
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]]
* Web: https://szit.hu
===== A tesztelés szintjei =====
* egységtesztelés
* komponens teszt (vagy modul teszt)
* integrációs teszt
* rendszerteszt
* átvételi teszt
===== Egységtesztelő rendszerek =====
* JUnit - Java
* NUnit - C#
* Jest, QUnit, Mocha, Jasmine - JavaScript
* unittest (Python modul) - Python
===== JUnit teszt =====
A JUnit egy egységteszt-keretrendszer.
Dokumentáció:
* https://junit.org/junit5/docs/current/api/ (2021; JUnit5)
===== Annotáció =====
Az **org.junit.jupiter.api.Test** annotáció a leggyakrabban használt annotációs osztály.
@Test
void testCalcArea() {
assertEquals(525, triangle.calcArea(30, 35));
}
* RepeatedTest
* Többször végrehajtandó:
* @RepeatedTest(5)
* DisplayName
* Egyéni név:
* @DisplayName("Valami a tesztről")
* Order
* Végrehajtási sorrend megvalósítása
* @Order(2)
* másodiknak
@Test
@Order(1)
void oneTest() {
//teszt
}
@Test
@Order(20)
void twoTest() {
//teszt
}
* Tag
* feliratozás
* @Tag("lassú")
* Disable
* teszt tiltása
* @Disabled("Please fix and enable")
@Test
@Disabled("Please fix and enable")
public void checkSomething() {
// assertThrows()
}
===== assert =====
Néhány függvény az **org.unit.jupiter.api.Assertions** osztályból:
* assertEquals()
* assertNotEquals()
* assertTrue()
* assertFalse()
* assertNull()
* assertNotNull()
* assertSame()
* assertNotSame()
* assertArrayEquals()
* assertInstanceOf() - objektum típusának ellenőrzése
* assertIterableEquals() - iterálható
* assertThrows() - kivétel ellenőrzése
===== Az AAA minta =====
Az AAA, a Arrange, Act, Assert szavakból alkotott betűszó.
A Unit tesztek általános felépítésének mintája.
* Arrange: adatok beállítása, előkészítése
* Act: tesztelt metódus hívása
* Assert: Ellenőrzés
===== Felépítő és lebontó funkciók =====
* AfterAll
* Minden teszt után végrehajtandó.
* A metódusnak statikusnak kell lennie.
* AfterEach
* A következő tesztek után:
* @Test, @RepeatedTest, @ParameterizedTest, @TestFactory, @TestTemplate
* BeforeAll
* Minden teszt előtt végrehajtandó.
* A metódusnak statikusnak kell lennie.
* BeforeEach
* A következő tesztek előtt:
* @Test, @RepeatedTest, @ParameterizedTest, @TestFactory, @TestTemplate
@BeforeEach
void setUp() throws Exception {
triangle = new Triangle();
}
===== Tesztírás =====
import static org.junit.jupiter.api.Assertions.assertEquals;
import lan.zold.Triangle;
import org.junit.jupiter.api.Test;
class FirstTests {
private final Triangle triangle = new Triangle();
@Test
void testCalcArea() {
assertEquals(2, triangle.calcArea(30, 35));
}
}
@Test
void checkSomething() {
// TODO megvalósítandó
fail("not yet implemented");
}
===== Kivétel ellenőrzése =====
@Test
void testExpectedException() {
Assertions.assertThrows(ApplicationException.class, () -> {
//teszt
});
}
@Test
void testExpectedException() {
Assertions.assertThrows(NumberFormatException.class, () -> {
Integer.parseInt("egy");
});
}
===== Gyakorlat =====
* Írjon programot, amely fájlbeolvasó függvényt tesztel.
===== Forrás =====
* https://junit.org/junit5/docs/current/user-guide/ (2021)