Publicidad
Publicidad

Más contenido relacionado

Publicidad

Devops meetup - Automatizált tesztek

  1. Automatizált tesztek
  2. Rólam (Takács Zsolt) Backend developer @ ustream.tv Főleg PHP fejlesztés, kevés Java @oker1 zsolt.takacs.cc github.com/oker1
  3. Teszttípusok Rengeteg létezik: ● unit tesztek ● adatbázistesztek ● integrációs tesztek ○ rétegtesztek ■ subcutaneous tesztek ○ contract tesztek ● acceptance tesztek ● end to end tesztek Egyik típus sem univerzális, a kulcs a megfelelő vegyítésük.
  4. Unit tesztek ● Egy adott egység tesztelése elkülönítve a többitől. ● Több szemlélet (Mockist, Classical) bővebben ● Szorosan kapcsolódik a TDDvel ● A lehető leghamarabb befolyásolja a kód belső minőségét, már a születésekor ○ loose coupling ○ tesztelhetőség (IoC/DI) ○ tisztaság ● A lehető leggyorsabban ad visszajelzést az egység működéséről ● TDD nélkül is hasznos, de vele együtt tud igazán hatásos lenni.
  5. Unit tesztek/2 ● Hibalokalizáció: akkor jók a tesztesetek, ha minél kevesebb törik el egyszerre, így könyebb megtalálni az okot ● Függetlenek legyenek 3rd partyktól, speciális bővítményektől (pl. nem alapértelmezett php modulok) ● Fő előnyök: ○ gyorsaság ○ izoláció ○ könnyű a 100% fedettség
  6. Unit tesztek és legacy kód ● Micheal Feathers meghatározása szerint minden teszt nélküli kód legacy kód. (Working Effectively With Legacy Code) ● Legacy kód unit tesztelhetővé tehető. ● A tesztelhetőséghez seamek kellenek ● Seamek - Olyan helyek a kódban, ahol a kód átírása nélkül változtatható a működése. pl ○ Dependency Injection segítségével függőség lecserélése ○ Tesztspecifikus leszármazott + metódus felüldefiniálása ● Ha nincsenek, alacsony kockázatú refaktorálással kialakíthatóak. ● Rengeteg munka, rutin kell hozzá
  7. Adatbázistesztek ● Adatbázisközpontú alkalmazásoknál ideális ● Klasszikus négy fázis ○ Setup - CREATE|TRUNCATE, INSERT ○ Exercise ○ Verify - Db állapot ellenőrzése ○ TearDown - DROP|TRUNCATE|NOOP ● Eszközök ○ DbUnit (Java és PHP portok) ○ Etsy PHPUnit Extensions (csak PHP) ○ Liquibase (Nyelvfüggetlen)
  8. Legacy kód ● Unit-tesztelhetővé alakítás nem mindig a legjobb megközelítés. ● Ha adatokat tárol az alkalmazás, azon keresztül sokszor könnyebben tesztelhető. ● Elég a tesztelendő kódot kiemelni (ha szükséges) és utána átalakítás nélkül lefedhető tesztekkel. ● Általában ezek a tesztek átfogóbbak, így nagyobb mozgásteret adnak refaktoráláshoz, mint a unit tesztek. ● Frameworkök segítségével kényelmesen végezhető a tesztekben a setup és az ellenőrzés is.
  9. Integrációs tesztek ● Sikertelen marsjáró példája ● A kifejezés nagyon tág ● A lényeg, hogy több egység integrációját teszteljük ● Integrációs hibák: ○ Paraméterezési hibák ○ Hibás feltételezés kollaborátorban ● Gyakori problémák a tesztekben: ○ Rendszerhatárt jelentő implementációk lecserélése, pl. adatbázis, külső api kliense ○ Globális állapotot becsomagoló objektumok lecserélése (pl. idő) ○ Cross-cutting concernök, pl logolás lecserélése ● Mindegyik megoldása körülményes Dependency Injectionnel
  10. Dependency Lookup ● Dependency Injection helyett használható ● Használható Singleton, Registry, stb. ● Globálisan elérhető legyen ● Befolyásolható legyen mit ad a dependenciát kérő kódnak
  11. Dependency Lookup példa
  12. Contract tesztek ● Egy interfész implementálóit teszteli ● Az implementáló osztályok működésével kapcsolatos elvárásokat rögzíti ● Megvalósítás: absztrakt tesztosztály ● Minden implementálóhoz egy leszármazott tesztosztály ● A leszármazott teszt implementálja a tesztelt objektum létrehozását, az ősben vannak a tesztesetek
  13. Contract teszt példa
Publicidad