unit testing

Üdvözlöm, Ön a unit testing szó jelentését keresi. A DICTIOUS-ban nem csak a unit testing szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a unit testing szót egyes és többes számban mondani. Minden, amit a unit testing szóról tudni kell, itt található. A unit testing szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. Aunit testing és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.

Főnév

unit testing (tsz. unit testings)

  1. (informatika) A unit testing, azaz egységtesztelés, a szoftvertesztelés egyik alapvető technikája. Célja, hogy a program legkisebb egységeit – általában egyes függvényeket, metódusokat vagy osztályokat – külön-külön teszteljük, hogy meggyőződjünk helyes működésükről.



1. Mi az a unit test?

Egy unit test egy olyan rövid kód, amely meghív egy adott függvényt vagy metódust ismert bemenetekkel, és ellenőrzi, hogy a visszatérési érték (vagy mellékhatás) megfelel-e az elvárt eredménynek.

Példa (C++ / GoogleTest):

TEST(SzamoloTest, Osszeadas) {
    Szamolo s(2, 3);
    EXPECT_EQ(s.osszeg(), 5);
}

2. Miért fontos az egységtesztelés?

Előnyök:

  • Hibák korai felfedezése
  • Könnyebb refaktorálás (ha elromlik valami, a teszt szól)
  • Dokumentációként is szolgálhat
  • Automatizálható, így CI/CD rendszerekbe integrálható
  • Bizalmat ad a fejlesztőnek, hogy a kód helyesen működik



3. Unit test jellemzői

  • Független: Minden teszt külön-külön fusson, ne függjön más tesztek sorrendjétől.
  • Gyors: Másodperceken belül le kell futnia.
  • Determinista: Azonos bemenet mindig azonos kimenetet adjon.
  • Automatizált: Emberi beavatkozás nélkül kell futtatni.



4. Tesztkeretek (Frameworks)

Különböző nyelvekhez különböző eszközök állnak rendelkezésre:

Nyelv Keretrendszer
C++ GoogleTest, Catch2
Java JUnit
Python PyTest, unittest
JavaScript Jest, Mocha
C# NUnit, xUnit



5. Unit test struktúra (AAA minta)

AAA = Arrange – Act – Assert

// Arrange
Szamolo s(4, 5);

// Act
int eredmeny = s.osszeg();

// Assert
EXPECT_EQ(eredmeny, 9);
  • Arrange: teszt inicializálása
  • Act: metódus meghívása
  • Assert: elvárt eredmény ellenőrzése



6. Mit érdemes unit tesztelni?

  • Bonyolult logikájú függvények
  • Feltételes ágak
  • Határértékek (pl. 0, üres lista)
  • Hibakezelés
  • Számítási algoritmusok
  • Osztály metódusai

Nem célszerű:

  • UI (gombok, ablakok)
  • Adatbázis hívások (ez inkább integrációs teszt)
  • Hálózati hívások (ez is)



7. Példa: C++ unit test GoogleTest-tel

class Szamolo {
    int a, b;
public:
    Szamolo(int x, int y): a(x), b(y) {}
    int osszeg() const { return a + b; }
};

TEST(SzamoloTest, HelyesEredmeny) {
    Szamolo s(1, 2);
    EXPECT_EQ(s.osszeg(), 3);
}

Build rendszerrel futtatható automatikusan is (CMake, CTest, stb.).



8. Mocking és stubok

Mock: szimulál egy osztályt/metódust, hogy izoláljuk a tesztet más moduloktól.

Stub: egy egyszerű visszatérési értéket adó helyettesítő.

Használat például:

  • Külső API hívások helyettesítése
  • Fájlbeolvasás imitálása memóriából
  • Adatbázis helyettesítése memóriában



9. Code coverage (kódfedettség)

Azt méri, hogy a tesztek a program hány százalékát fedik le futás közben.

  • Statement coverage – minden utasítás futott?
  • Branch coverage – minden elágazás mindkét ága futott?
  • Function coverage – minden függvény meghívásra került?

Fontos: 100% coverage ≠ 100% hibamentesség!



10. Tesztvezérelt fejlesztés (TDD)

A TDD során a fejlesztő előbb írja meg a tesztet, majd csak utána az azt kiszolgáló kódot.

Folyamat:

  1. Írj egy hibásan futó tesztet (piros)
  2. Írd meg a kódot, hogy a teszt lefusson (zöld)
  3. Refaktorálj (kódminőség)



11. Tesztelési hibák és tanulságok

Tipikus hibák:

  • Rosszul definiált elvárások (EXPECT_EQ(5, 4))
  • Nem megfelelő bemenetek (pl. nullptr-rel összeomló teszt)
  • Tesztek nem izoláltak (állapotot hagynak)
  • Lassú, I/O-ra váró tesztek

Jó tesztelési gyakorlat:

  • Használj setup()/teardown() mechanizmust
  • Csoportosítsd a teszteket logikai egységekbe
  • Tesztelj negatív eseteket is



12. Automatizálás és integráció

A unit tesztek jól beilleszthetők a CI/CD pipeline-ba (pl. GitHub Actions, GitLab CI, Jenkins), hogy minden commit után azonnal lefussanak.



13. BDD – viselkedésalapú tesztelés

A Behavior Driven Development (pl. Given-When-Then) emberközeli nyelven írja le a tesztet, gyakran domain-specifikus nyelvben.

Példa (pseudo):

Given a calculator
When I add 2 and 3
Then the result should be 5

14. Unit test filozófia

Az egységtesztelés nem csak technikai eszköz, hanem fejlesztési szemlélet:

  • Megbízhatóság = tesztek + tiszta kód
  • A hibák nem ott lesznek, ahol várod – tesztelj mindent!
  • A jól tesztelt kód könnyebben refaktorálható, továbbfejleszthető



TL;DR

  • A unit test a kód legkisebb egységeit ellenőrzi automatizált módon.
  • Használj jól bevált tesztkereteket (pl. GoogleTest, JUnit, PyTest).
  • Tesztelj logikát, határértékeket, kivételeket, hibás inputokat.
  • Írj gyors, determinisztikus és izolált teszteket.
  • Automatizáld a futtatásukat build pipeline-okban.
  • Soha ne bízz a kézi tesztelésben egyedül.