PHP unit tesztelés
Sziasztok!
Érdekelne, hogy van esetleg köztetek olyan, aki jobban belemélyedt ebbe a témába? Kíváncsi lennék, hogy itthon mennyire foglalkoznak ezzel a témával.
Üdv,
Felhő
■ Érdekelne, hogy van esetleg köztetek olyan, aki jobban belemélyedt ebbe a témába? Kíváncsi lennék, hogy itthon mennyire foglalkoznak ezzel a témával.
Üdv,
Felhő
Fapados
phpunit
karcsú
UPDATE: http://weblabor.hu/munka/21554
Üdv,
Felhő
Elmélkedés a magyarázatról
Az ügyfelek pedig Magyarországon ritkán hajlandók rááldozni az időt és még kevésbé hajlandóak megfizetni azt az időt, amit tisztességes CI és testing jelent. Még akkor is ha az esetek 70%-ában ez rövidebb idő alatt jelentene magasabb minőségű megoldásokat.
Természetesen meg lehet vívni velük ezt a harcot, nekünk néha sikerül is. De közel sem mondhatnám hogy pl. elégedett vagyok az ilyen jellegű infrastruktúrával nálunk és nem azért mert nem ismerjük a lehetőségeket vagy nincs rendelkezésre álló támogató technológia. Persze lehet direkt olyan ügyfeleket elvállalni, akik ebbe belemennek és meg is fizetik, de ezt is igen kevesen engedhetik meg maguknak.
A másik oldal valóban az, hogy nem ismert a dolog a fejlesztők körében, nem értik miért jó az, ha a munkájuk 60%-a sosem fog lefutni éles környezetben. A managerekről meg ne is ejtsünk szót. Nekik még nehezebb ezt eladni. Próbáld meg 10 managernek elmagyarázni, hogy miért kell a beosztottjainak az idejük 60%-t olyanra fordítani, amiért effektíve az ügyfél nem fizet. Nekik ez profitkiesés. Ez pedig keményebb dió, mint a fejlesztőkben kialakítani a kultúrát.
Végül, de nem utolsó sorban azt se felejtsük el, hogy sok olyan PHP feljesztő rohangál (sztem ez ~80%-a a mai magyar és környező országok minusz ausztria PHP fejlesztőinek), akinél ennél komolyabb kultúrális hiányosságok vannak és van még mit pótolnia ennél lényegesen fontosabb területeken is.
Márk megmondta a két fillérjét :)
részben talán egyetértek :)
Tehát pl. bármelyik cégenk, akinek van mondjuk egy komolyabb frameworkje, akkor megérheti, ha azt unit tesztelve tartja, mert egy abban előkerülő alattomos hiba rengeteg időt és vesződséget okozhat. Nyilván az első időszak "drágább", meg kell tanulni, ki kell tapasztalni ezt is, de szerintem megéri.
Üdv,
Felhő
Re: részben talán egyetértek :)
- hulyeseg
- semmi ertelme
- nincs ra ido
- az mi?
Egy biztos: unit tesztelest a projekt elejen el kell kezdeni, mert utolag mar nem lehet hozza irni. Egyreszt mennyisegi kodot kell hozza megirni, masreszt a rendszer nem feltetlen van ekkor felepitve, hogy teszteleheto legyen.
Fontos, hogy a teszt irasa legyen egszeru legyen. Ha 1 oldalban van eloallitva teszt korulmeny, akkor lehet erezni, hogy valami nem koser. A jo teszt olvasmanyos, konnyen megertheto. Tovabbi erdekes vonzata, hogy a unit tesztelt rendszerek rugalmasabbak, es kevesbe komplexek.
Javahoz irtak egy Unitils nevu eszkozt, ami az altalanos problemakat egyszerusiti le nagyban. Erdemes vegigolvasgatni a tanacsaikat, nagyon jo otletek vannak ott.
inkább úgy lenne az igazi
Üdv,
Felhő
Ez engem is erdekelne
A dokumentacioban bemutatott BankAccount-os peldahoz keszitett testcase-t lehet meg boviteni, pl. szam helyett string vagy tomb atadasaval. Igy a teszt kb 2x akkora lesz, mint maga a tesztelendo osztaly. Kicsit elmelaztam ezen, es kivancsi lettem: minden metodusban ellenorzitek a parameterek tipusat, meretet stb.; vagy csak a publikus metodusokban, mondvan a privat metodusok feltetelezhetoen jo parametereket kapnak; esetleg csak a felhasznalotol erkezo adatokat ellenorzitek azokon a helyeken, ahol szukseges? Mivel azt hiszem ettol (is) fugg, mennyire "mely" teszteseteket kell gyartani. (Most az egyeb hibaktol tekintsunk el, mint pl. file I/O, adatbaziskapcsolat stb.)
paraméterek ellenőrzése
Üdv,
Felhő
Igaz
Valoban nem, a unit lehet egy nagyobb entitas, pl. MVC mintat kovetve valoszinuleg sok esetben eleg a kontrollerekhez kesziteni 1-1 testcase-t. Velemenyem szerint ez attol fugg, mennyire alaposan akarunk tesztelni. Mindossze a "legrosszabb" eshetoseget neztem, amikor tenyleg minden ellenorzesre kerul.
Errol a PHP Doctrine jutott eszembe. Nagyon jol hasznalhato validacios lehetosegek vannak benne, ekkor viszont atharul az ellenorzes a modellre. Ezzel kapcsolatban mi a velemenyed?
ellenőrzés helye
Üdv,
Felhő
Domain model
Tulajdonképpen a kollega feltette az egyik legvitatottabb kérdést a szakmában. Ti. hol kell a domain model-t megvalósítani. Most már azért kezd körvonalazódni egy válasz, amelyben a frakciók úgy-ahogy megegyezni látszanak szerintem. Ez pedig a hibrid megoldás, azaz maga a modelldefiníció az a Model rétegbe kell tartozzon, de a domain tulajdonságokat a controllerben kell érvényesíteni. Tehát a validáció az controller szerep kellene legyen és nem modell szerep.
Ez, ha belegondoltok, így helyes, hiszen ha a modellben lenne a domain tulajdonság (pl. validáció és konzisztenciaellenőrzés), akkor felesleges köröket futnánk a view-től a modellig a controllereken át, valamint az automatikus view ellenőrzések (pl. JS-ben megvalósítva) így közvetlen a modellt kell hívják, amit ugye szeretnénk elkerülni, hiszen nem véletlen döngetjük a mellünket az MVC-vel, ugye? :)
A másik kellemetlen dolog ami felmerülhet, az a portolhatósági és szakaszhatárok menti függetlenség. Ha a modell rétegben van domain tulajdonság, akkor bizony magának a modell absztrakciót biztosító eszköznek (pl. Doctrine) kell implementálnia ezt a viselkedést minden támogatott perzisztencia-eszközhöz. Ez pedig gyakran azt jelenti, hogy hatalmasra duzzadnak ezek a könyvtárak, ami nekünk felhasználóknak nem jó (lásd Doctrine, mint ékes példa a nagy kódbázisból eredő bugokra és azok élettartamára).
Szóval megfontolandó hogy akar-e a tervező úr/hölgy domain logikát szőni a modellbe, ahelyett hogy a modell-t "butának" kezelné és csak minimális absztrakciót vár el tőle.
Viszont...
Nálam ez így megy:
(bocs, hogy belekotyogok, csak érdekel a téma :))
Örömmel veszem, ha valakit érdekel!
Mi ennek a mambo-jambo-nak a lényege? Praktikusan semmi. Itt csak elvekről van szó. Így felvilágosodva viszont azt kell mondanom hogy nem értek egyet az MVC-vel a következők miatt:
Nem vagyok hajlandó elfogadni azt, hogy az információval/adattal kapcsolatos állapotok és viselkedések a Model réteg sajátosságai. Ennek praktikusan a controller rétegben lenne a helye.
Megoldhato
Egyebkent nem tul trivialis lekezelni egy sima felhasznalo regisztraciot sem. Tegyuk fel, hogy van egy captcha, valamint ketszer kell begepelni a jelszot. Ezeket a controllerben ellenorizzuk, a model meg se kapja ezeket az adatokat. Ezert pl. hibas captcha eseten meg se probaljuk elmenteni a modelt, a muvelet ugyanis sikerulne. Ellenben mi tortenik, ha a hibas captcha mellett olyan felhasznalonevet adott meg a user, ami mar letezik? Ezt a model ellenorizne, de mivel el se jut a muvelet a modellig, eleg bonyolult elerni azt, hogy mindket hibarol tudomast szerezzunk, illetve azokrol ertesitsuk a usert. Bar az is lehet, hogy erre van valami megoldas a Doctrine-ban, tulsagosan nem melyedtem meg el benne.
Egy picit eltertunk a tematol, ugyhogy ha gondoljatok folytassuk mashol :)
explicit validálás
Én egyébként azért vagyok modell párti ebben a dologban, mert mint fentebb említettem, végeredményben maga az adatbázis is elvégez egy ellenőrzést az adatokon (típus, constraint-ek, etc.), mielőtt elmentené a rekordot. Így nekem kézenfekvőnek tűnt, hogy akkor ez a feladat magasabb szinten is maradjon a modellnél.
szerk.: folytathatjuk máshol is, ha nem értünk egyet :)
OK
Ezzel teljesen tisztaban vagyok. Epp azt irtam, hogy mi van, ha nem a model elemeivel van a gond, illetve ha nem csak azokkal. Vagy az isValid()-nak adod at a masodik jelszot es a beirt captcha stringet?
Ja, így már értem
Vagyis?
Persze megnezheted a controllerben, hogy letezik -e a felhasznalonev, de miert tenned, ha az a model feladata? Ezt hogy lehetne szepen megoldani?
Ehhez mit szólsz?
Hm...
Yepp
Koszonom
Az e-mail ellenorzesrol tudtam. Szerintem jo igy, regularis kifejezessel barmikor helyettesitheto, ha nincs szukseg az ellenorzesre.
nem ugyanaz a kettő
A két jelszó kérdése meg szerintem szintén ugyanez az eset, bár talán nem annyira egyértelmű. De itt is valahol egy a modelltől igazából független, emberi tényező miatt szükséges valamiről van szó. Itt is igaz lenne, ha pl. van egy fájlod, ami tartalmazza az új usereket, és mondjuk ez lenne a kontroller inputja, akkor eszedbe sem jutan a modellben ilyesmit csinálni.
És pont az ilyesmik miatt is tetszik nekem egy olyan megközelítés, hogy a kontroller el tudja kérni a modelltől a számára szükséges validátorokat, ezt ki tudja egészíteni a sajátjaival, és ez alapján történik meg a kérés validálása.
Üdv,
Felhő
Hupperesen
ugyanez nálam
kötelező :)
Ez hol, melyik?
UPDATE: esetleg nincs mostanában ott valami lehetőség?