szó jelentését keresi. A DICTIOUS-ban nem csak a
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
szót egyes és többes számban mondani. Minden, amit a
szóról tudni kell, itt található. A
szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. A
é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)
- (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:
- Írj egy hibásan futó tesztet (piros)
- Írd meg a kódot, hogy a teszt lefusson (zöld)
- 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.