1. Jiri Knesl
  2. mockista

Wiki

Clone wiki

mockista / Home

Mockista je knihovna na mockování, kterou jsem napsal, protože mi přijde mock nástroj v PHPUnitu… jak to říct slušně… nepraktický, zdlouhavý a lidem na školení se nelíbí a mě se těžko vysvětluje. Mockista se samozřejmě dá v PHPUnitu používat normálně, ale bude fungovat v kterémkoliv jiném testovacím nástroji – teda ne, že by v PHP nějaký testovací nástroj za to stál.

Jak Mockista funguje?

Můžete si snadno nadefinovat nějaké chování

$mock = Mockista\mock();
$mock = Mockista\mock("NejakaTrida"); // je mozne mockovat existujici tridy, aby kod prosel type hintingem

// můžu přiřazovat atributy
$mock->a = 11;

// můžu definovat chování metod (určím parametry a návratovou hodnotu)
$mock->add(1, 1)->andReturn(2);
$mock->add(2, 2)->andReturn(4);

// můžu určit, že pro dané parametry se vyhodí vyjímka
$mock->divide(3, 0)->andThrow(new Exception("Division by zero", 0));

// pokud neuvedu žádné parametry, je dané zavolání defaultní
// a můžu používat callback pro generování výsledku
$mock->multiply()->andCallback(function($a, $b) { return $a * $b; });

// pak zmrazím mock
$mock->freeze();

// a začnu ho používat jako libovolný objekt
echo $mock->a; // 11;
echo $mock->add(1, 1); // 2
echo $mock->add(2, 2); // 4
echo $mock->divide(3, 0); // vyhodi vyjimku
echo $mock->multiply(3, 3); // 9

Co umí Mockista ještě?

Umí kontrolovat, kolikrát byla metoda zavolána:

$mock = Mockista\mock();
$mock->fce()->never(); // nikdy nebude zavolána
$mock->fce()->once(); // jednou
$mock->fce()->twice(); // dvakrát
$mock->fce()->exactly(4); // přesně čtyřikrát
$mock->fce()->atLeastOnce(); // aspoň jednou
$mock->fce()->atLeast(3); // aspoň třikrát
$mock->fce()->noMoreThanOnce(); // ne víc než jednou
$mock->fce()->noMoreThan(3); // ne víc než třikrát
$mock->assertExpectations(); // zkontroluje a pokud se očekávání nenaplní, vyhodí vyjímku
$mock->fce()->once ->twice ->never ->atLeastOnce ->noMoreThanOnce // všechny metody bez parametrů mohou být volány i bez ()

Přidal jsem zkratku pro přidávání atributů a metod:

$mock = Mockista\mock(["x"=>1, "y"=>function($x){return $x * 2;}]);
$mock = Mockista\mock("NejakaTrida", ["x"=>1, "y"=>function($x){return $x * 2;}]);
$mock->freeze();
$mock->x; // 1
$mock->y(2); // 4

Mockista je k dispozici pod licencí: "Dělejte si s tím, co chcete. Já za nic neručím." (neboli BSD licence)

Instalace je jednoduchá. Potřebujete pouze require bootstrapu v mockistovi.

require_once "mockista/bootstrap.php";

Kam dál?

Pro jednodušší testování zkuste: KDev_Test

Updated