Pořád pracuji na Mockistovi 2. Mám pro vás pár aktuálních novinek.
Mockista je balíček pro packagist
Ti z vás, kdo ho používáte, máte instalaci zase o něco jednodušší. Mockista v tuto chvíli nemá žádné závislosti. Přemýšlím ale, že bych v něm začal používat Googyho.
Mockista už projde typehintingem
$mock = Mockista\mock("Trida nebo Interface");
$this->assertInstanceOf("Trida nebo Interface", $mock);
Díky tomu můžete mockistu používat i tam, kde se vyžaduje nějaká konkrétní instance. Předchozí funkcionalita:
$mock = Mockista\mock(array("x"=>1, "y"=>function() {return time(); }));
$mock->freeze();
$mock->x; // 1
Je nyní volitelně na 2. parametru, pokud použijete type hinting, jinak
zůstává na prvním:
$mock = Mockista\mock("Trida nebo Interface", array("x"=>1, "y"=>function() {return time(); }));
$mock->freeze();
$mock->x; // 1
Opravil jsem chyby
- pokud při učení byl parametr metody objekt a ten se změnil, mockista nefungoval dobře. OPRAVENO
- mockista generuje prázný konstruktor, čímž už se nezobrazují chybové hlášky, pokud byly nějaké parametry vyžadované. OPRAVENO
- Mockista vynechá final metody. OPRAVENO
- Mockista vyhodí výjimku při pokusu mockovat finální třídu. OPRAVENO
- Mockista nebyl kompatibilní s Nette\Object a nešlo tedy mockovat objekty z Nette. OPRAVENO
V tuto chvíli nejsou žádné nahlášené chyby. Pokud nějakou chybu naleznete, prosím, hlaste ji do Issues.
Mockování statických metod
V privátním branchi vyvíjím možnost mockovat i statické metody.
Rozhraní zatím plánuju asi takto:
$mock = Mockista\mock("Trida nebo Interface");
$mock::x()->once->andReturn(1);
$mock->freeze();
$mock::x(); // 1
Partial Mock
Promýšlím funkcionalitu partial mocku. O co jde?
Mockista dostane reálný objekt. Sám simuluje chování jen tam, kde je chování definováno. Všude jinde se předává volání původnímu objektu.
Zatím to mám rozmyšlené asi takto:
class Obj
{
function x() {return 1;}
function y() {return time();}
}
$obj = new Obj;
$mock = Mockista\mock($obj);
$mock->y()->andReturn(123321123);
$mock->freeze();
$mock->x(); // 1
$mock->y(); // 123321123
Z partial mocků se později vyvinou i slibované Spy objekty.
Čekám i na vaše tipy
Jak Mockistu používáte? Pokud ho nepoužíváte, proč? Je něco, co vám na něm chybí nebo překáží?
