Aktuální vývoj v Mockistovi


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áží?


Copyright © 2010 Jiří Knesl; 777 002 104 jiri@sprintmasters.cz RSS
Followujte mě na twitteru