„Codeception Unit Tesztelés segédlet” változatai közötti eltérés

Innen: Szitár-Net Wiki
Ugrás a navigációhoz Ugrás a kereséshez
28. sor: 28. sor:
 
A setUp() segítségével minden egyes teszteset előtt lehetőségünk van egy új partner objektum létrehozására, illetve a korábbi adatok törlésére, így szeparáltan tudjuk tesztelni az egységet. A képen látható módon létrehozhatunk privát változót, melyet felhasználhatunk a tesztek során.
 
A setUp() segítségével minden egyes teszteset előtt lehetőségünk van egy új partner objektum létrehozására, illetve a korábbi adatok törlésére, így szeparáltan tudjuk tesztelni az egységet. A képen látható módon létrehozhatunk privát változót, melyet felhasználhatunk a tesztek során.
 
[[Fájl:Unit10.png|300px|bélyegkép|középre|Példa setUp() használatára]]
 
[[Fájl:Unit10.png|300px|bélyegkép|középre|Példa setUp() használatára]]
 +
 +
=== Assert / Állítás ===
 +
[[Fájl:Unit11.png|400px|bélyegkép|jobbra|Példa teszt futtatása során hibás assertEqual()-ra]]
 +
Az assertek segítségével vizsgálhatjuk meg a kívánt elemet. A Codeception ellenőrzi az assertek visszatérési értékét. Majd ezek alapján összegzi a tesztek eredményét. Példa néhány assert-re:
 +
* '''$this->assertTrue(1 == 1, ”egyenlőség vizsgálat”)''': 1. paraméter a feltétel, ha igaz akkor a teszt / assert sikeres volt | 2. paraméter az assert leírása
 +
* '''$this->assertEqual(4, 3+2, ”összeadás”)''': 1. paraméter az elvárt érték, a 2. paraméter a vizsgálandó érték, ha a két paraméter egyenlő akkor teszt / assert sikeres volt | 3. paraméterben szintén megadható az assert leírása<br><br>
  
 
== Gyakori hibák ==
 
== Gyakori hibák ==

A lap 2021. augusztus 31., 07:16-kori változata

A Yii2 keretrendszer automatikusan feltelepíti a Codeception nevű teszt keretrendszert, mely PhpUnit-ot használ. A terminálba a beírt vendor\bin\codecept parancs segítségével megtekinthetjük a kiválasztható opciókat.

Unit teszt osztály létrehozása

A tesztelni kívánt osztály metódusainak generálása

Terminálba írható parancs segítségével: vendor\bin\codecept g:test unit HolidaysTest
vagy pedig:

1. Grafikus felületen tests mappában unit mappára jobb klikk > new > PHP Test > Codeception Unit Test
2. Ezekután bejön a Create New PHP Test ablaka: Itt megadhatjuk, hogy melyik megírt osztályt szeretnénk tesztelni, illetve az adott osztály tesztelni kívánt metódusait is legenerálhatjuk.

Teszt adatbázis létrehozása

Az ActiveRecord modellek hatékony teszteléséhez szükséges a külön teszt adatbázis létrehozása
Fontos: Ne a fejlesztői vagy az éles adatbázist használjuk, mert az adatok törlődhetnek.
1. Teszt adatbázis és a megfelelő táblák létrehozása
2. A config mappában a test_db.php fájlon belül kell megadnunk a teszt adatbázis nevét (pl: dbname=c1_matrix_test)

Tesztek írása

Unit osztályból örökölt metódusok

Lehetőségünk van, a teszt / tesztesetek futtatása előtt és után beépített segéd metódusok lefuttatására. Ilyenek például:

  • setUpBeforeClass() - A teszt osztály működtetése előtt lefutó metódus
  • _before() - A teszt osztályban csak egyszer fut le, a tesztesetek előtt
  • setUp() - Minden teszteset előtt lefut
  • tearDown() - Minden teszteset után lefut
  • _after() - A teszt osztályban csak egyszer fut le, a tesztesetek után
  • tearDownAfterClass() - A teszt osztály működtetése után lefutó metódus

Példa setUp() metódus használatára:
A setUp() segítségével minden egyes teszteset előtt lehetőségünk van egy új partner objektum létrehozására, illetve a korábbi adatok törlésére, így szeparáltan tudjuk tesztelni az egységet. A képen látható módon létrehozhatunk privát változót, melyet felhasználhatunk a tesztek során.

Példa setUp() használatára

Assert / Állítás

Példa teszt futtatása során hibás assertEqual()-ra

Az assertek segítségével vizsgálhatjuk meg a kívánt elemet. A Codeception ellenőrzi az assertek visszatérési értékét. Majd ezek alapján összegzi a tesztek eredményét. Példa néhány assert-re:

  • $this->assertTrue(1 == 1, ”egyenlőség vizsgálat”): 1. paraméter a feltétel, ha igaz akkor a teszt / assert sikeres volt | 2. paraméter az assert leírása
  • $this->assertEqual(4, 3+2, ”összeadás”): 1. paraméter az elvárt érték, a 2. paraméter a vizsgálandó érték, ha a két paraméter egyenlő akkor teszt / assert sikeres volt | 3. paraméterben szintén megadható az assert leírása

Gyakori hibák

Configuration.php: _bootstrap.php cant't be loaded

bootstrap can't be loaded

Ha a vendor\bin\codecept bármilyen parancsa beírása esetén az alábbi képen is látható hiba üzenet jelenik meg, akkor valószínűleg a tests mappa törölve lett, a codeception.yml viszont nem
Megoldás:

  1. A codeception.yml fájl törlése
  2. A terminálban a php composer.phar require codeception/module-phpbrowser --dev parancs beírása, a module-phpbrowser telepítése / frissítése
  3. A terminálban a vendor\bin\codecept bootstrap parancs futtatása

Ezekután létrehozhatjuk a tesztjeinket.

Class not found

Class not found

A vendor\bin\codecept run futtatása után a következő hiba üzenet fogad:
Megoldás: A hiányzó osztály és az Apps.php fájl require paranccsal történő implementálása a _bootstrap.php fájlban, az alább is látható módon:
require(__DIR__ . '\..\modules\partners\models\Partners.php');
require(__DIR__ . '\..\modules\apps\models\Apps.php');

Class 'Yii' not found

Class 'Yii' not found

Ha az alábbi hibaüzenet jelenik meg akkor, a codeception.yml fájl konfigurálása szükséges.
Megoldás: A codeception.yml fájlhoz az alábbi kód hozzáadása:

bootstrap: _bootstrap.php
modules:
    config:
        Yii2:
            configFile: 'config/test.php'

Call to a member function getDb() on null

[Error] Call to a member function getDb() on null

A hiba esetén, a unit.suite.yml fájl konfigurálása szükséges.
Megoldás: A unit.suite.yml fájlhoz az alábbi kód hozzáadása:

modules:
    enabled:
        - Yii2:
            part: [ orm, email, fixtures ]


Unknown database 'yii2_basic_tests'

[1049] Unknown database 'yii2_basic_tests'

Megoldás: Ebben az esetben a config mappában a test_db.php-ban a dbname beállítása szükséges.
Fontos: ne a fejlesztés adatbázisát használjuk, hozzunk létre külön tesztadatbázist