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