2017-11-06 9 views
1

Ich möchte Ich rief also auf meinem Test eine Twig_Environment für PHPUnit verspotten:Mocking Twig_Environment

$twigMock=$this->getMockBuilder(\Twig_Environment::class) 
          ->disableOriginalConstructor() 
          ->getMock() 
          ->method('render') 
          ->willReturn(''); 

Dann habe ich eine Klasse:

class SampleClass 
{ 
    private $twig=null; 

    public function __construct(\Twig_Environment $twig) 
    { 
     $this->twig=$twig; 
    } 

    public function foo($param) 
    { 
     if(param) 
     { 
      $content=$this->twig->render('some_template./html.twig'); 
     } 
     // DO other stuff 
    } 
} 

Aber wenn ich versuche, auf meine Testklasse aufrufen :

$campleClassInstance=new SampleClass($twigMock); 

ich erhalte die folgende Fehlermeldung:

Haben Sie eine Idee, wie Sie es lösen können?

Antwort

2

Sie übergeben die Einstellung der Variablen auf den Rückgabewert willReturn, die nicht das ursprüngliche Mock-Objekt, sondern ein PHPUnit_Framework_MockObject_Builder_InvocationMocker-Objekt zurückgibt, das PHPUnit intern verwendet. Sie können den Schein und die Erwartung nicht miteinander verketten, damit dies funktioniert. Ändern Sie Ihre Spott zu:

$twigMock=$this->getMockBuilder(\Twig_Environment::class) 
         ->disableOriginalConstructor() 
         ->getMock(); 

$twigMock->method('render') 
     ->willReturn('');