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