Ukázkový control, funkčnost je doufám zřejmá. Vykreslí pozdrav světu, přičemž
oslovení lze měnit buďto persistentním parametrem, nebo signálem:
class HelloWorldControl extends \Nette\Application\UI\Control
{
/**
* @var string
* @persistent
*/
public $world = 'World';
public function render()
{
echo htmlspecialchars("Hello $this->world!");
}
public function handleChangeTheWorld($newWorld)
{
$this->world = $newWorld;
}
}
Co se na tom dá testovat:
Výstup:
Při výchozím nastavení.
Při změně oslovení přes persistentní parametr.
Při změně oslovení signálem.
Při změně signálem se zároveň změní i hodnota parametru.
Jak na to: Metoda setUp vytvoří pro každý test novou instanci testovaného
controlu. Výstup zachytávám funkcemi pro řízení výstupu,
změnu a testování persistentního parametru provádím přímo na něm:
class HelloWorldControlTest extends \PHPUnit_Framework_TestCase
{
/**
* @var HelloWorldControl
*/
protected $testedControl;
protected function setUp()
{
$this->testedControl = new HelloWorldControl;
}
public function testRenderHelloWorldByDefault()
{
ob_start();
$this->testedControl->render();
$output = ob_get_clean();
$this->assertEquals('Hello Wolrd!', $output);
}
public function testWorldCanBeChangedByParameter()
{
$this->testedControl->world = 'Nette';
ob_start();
$this->testedControl->render();
$output = ob_get_clean();
$this->assertEquals('Hello Nette!', $output);
}
public function testWorldCanBeChangedBySignal()
{
$this->testedControl->handleChangeTheWorld('DPRK');
ob_start();
$this->testedControl->render();
$output = ob_get_clean();
$this->assertEquals('Hello DPRK!', $output);
$this->assertEquals('DPRK', $this->testedControl->world);
}
}
Testování jednoduchého Controlu
Ukázkový control, funkčnost je doufám zřejmá. Vykreslí pozdrav světu, přičemž oslovení lze měnit buďto persistentním parametrem, nebo signálem:
Co se na tom dá testovat:
Jak na to: Metoda
setUp
vytvoří pro každý test novou instanci testovaného controlu. Výstup zachytávám funkcemi pro řízení výstupu, změnu a testování persistentního parametru provádím přímo na něm: