Autor Zpráva
vivanatura
Profil *
Dobry den,
potreboval bych poradit ohledne unit testu (konkretne PHPUnit).
Testuji fci, ktera prebira jeden argument. Ve fci je podminka, pokud je argument ==0, tak se vrati vysledek 0, jinak se podle argumentu dohleda pomoci selectu pole v databazi.
Problem je v tom, ze testovaci fce mi projde pouze s argumentem 0. Pokud mu predam vyssi argument, vraci mi test take 0. Podle vypoctu ale 0 nema byt a dokonce i aplikace sama mi v prohlizeci zobrazi vysledek spravne. Tudiz jsem dosel k zaveru, ze je neco s temi testy, resp s nastavenim, protoze kdyz testuju ostatni fce, ktere se nepripojuji k db, tak vse funguje tak , jak ma.
Byl bych vdecny, kdy mi nekdo dokazal poradit.
Dekuju

Jinak test fce vypada takto:

public function testFunkce(){
$ocekavany = $this->object->funkce(1234);
$this->assertEquals(15,$ocekavany);
}

a testovana fce takto:

public function funkce($arg){
if($arg==0){
return 0;
}else{
$vysledek = $db->query('SELECT id FROM table WHERE cislo = '.$arg.'');
return $vysledek;
}}

Krome toho mi jeste test hazi chybu, ze se snazim ziskat property of non-object $db->query....ale na prohlizeci to vse bezi, tudiz se k db prihlasi tak, jak je to napsane.....
Nox
Profil
vivanatura:

V UnitTestech je důležité testovat přesně jen jednu jednotku

Tudíž $db by mělo být nahrazeno nějakým objektem, který jakoby funguje dokonale, má na nějaké konkrétní vstupy nějaké výstupy. Pokud to nejde jednoduše, pak jsi právě narazil na obtížně testovatelný kód a chtělo by to upravit tak, aby šlo $db vyměňovat ... pokud je to takto funkce, mělo by se $db předat v argumentu ...

http://www.phpunit.de/manual/3.7/en/test-doubles.html

případně vychytanější
https://github.com/padraic/mockery

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: