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:


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);
	}
}