PHPUnit test a chyba mockování

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
tttpapi
Člen | 100
+
0
-

Ahoj,

hrozně rád bych začal testovat. Už se o to pokouším docela dlouho a pořád neúspěšně (pokud nebudu počítat testy typu 1+1 = 2).

Mám napsaný test:

<?php
class TestMailSenderTest extends PHPUnit_Framework_TestCase {

    public function testSend() {
        $mailSender = new \App\Model\Mails\TestMailSender();
        $template = $this->getMock('NetteMailTemplate');

        $value = new \App\Model\Mails\NetteMailTemplate();
        $template->expects($this->once())
                ->method('getMailTemplateObject')
                ->with($this->isInstanceOf('NetteMailTemplate'))
                ->will($this->returnValue($value));

        $res = $mailSender->send($template);

        $this->assertTrue($res);
    }

}
?>

Pokud ho spustím, tak dostanu chybu:
E_RECOVERABLE_ERROR: Argument 1 passed to App\Model\Mails\TestMailSender::send()
must implement interface App\Model\Mails\IMailTemplate, instance of Mock_NetteM
ailTemplate_775d6c7c given

Tuto chybu dostanu pokaždé, když si pokusím cokoliv mockovat.

Pouštím to příkazem: phpunit –bootstrap bootstrap.php TestMailSenderTest.php (bez toho –bootstrap mi to nenajde ty třídy)

Děkuji za jakoukoli radu.

hranicka
Člen | 23
+
0
-

Mockuješ třídu NetteMailTemplate, ale asi chceš mockovat spíše App\Model\Mails\IMailTemplate.

Jako string parametr metodě getMock() musíš předat FQN té třídy, tedy vč. namespace.

tttpapi
Člen | 100
+
0
-

IMailTemplate je jenom rozhraní. Já myslel, že mám mockovat konkrétní implementaci.

hranicka
Člen | 23
+
0
-

Můžeš mockovat i rozhraní. O co ale šlo, tak že ty máš:

$template = $this->getMock('NetteMailTemplate');

ale taková třída neexistuje, musíš uvést FQN té třídy, tedy vč. namespace:

$template = $this->getMock('App\Model\Mails\NetteMailTemplate');
tttpapi
Člen | 100
+
0
-

To chápu. Ale i po tom, co jsem tam napsal celou FQN, tak se chyba nezměnila.

EDIT: Moje chyba. Už to funguje. Díky moc.

Editoval tttpapi (3. 7. 2014 10:45)

mystik
Člen | 312
+
0
-

Mockovat bys měl vždycky rozhraní pokud je to možné.