2017-11-06 4 views
1

私はだから私はと呼ばれる私のテストにはPHPUnitのためのTwig_Environmentをモックとしたい。そして、モッキングTwig_Environment

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

私はクラスがあります。

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

をしかし、私は私のテストクラスを呼び出すしようとすると、 :

01:

$campleClassInstance=new SampleClass($twigMock); 

私は次のエラーを取得します

TypeError: Argument 2 passed to \SampleClass::__construct() must be an instance of Twig_Environment, instance of PHPUnit_Framework_MockObject_Builder_InvocationMocker given,

これを解決する方法はありますか?

答えて

2

変数を戻り値willReturnに渡していますが、これは元のモックオブジェクトを返さず、PHPUnitが内部で使用するPHPUnit_Framework_MockObject_Builder_InvocationMockerオブジェクトを返します。これがうまくいくためには、モックと期待を連鎖させることはできません。あなたの嘲笑を次のように変更してください:

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

$twigMock->method('render') 
     ->willReturn(''); 
関連する問題