我想为phpUnit模拟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
}
}
但是当我试着打电话给我的测试课时:
$campleClassInstance=new SampleClass($twigMock);
我收到以下错误:
TypeError:传递给\ SampleClass :: __ construct()的参数2必须是Twig_Environment的一个实例,给出PHPUnit_Framework_MockObject_Builder_InvocationMocker的实例,
你知道如何解决它吗?
答案 0 :(得分:2)
您正在将变量设置为willReturn
的返回值,该值不会返回原始模拟对象,而是返回PHPUnit内部使用的PHPUnit_Framework_MockObject_Builder_InvocationMocker
对象。您不能将模拟和期望链接在一起以使其起作用。将你的模仿改为:
$twigMock=$this->getMockBuilder(\Twig_Environment::class)
->disableOriginalConstructor()
->getMock();
$twigMock->method('render')
->willReturn('');
答案 1 :(得分:2)
在symfony 4.4中,不能模拟Environment类:
将“ Twig \ TemplateWrapper”类声明为“最终”,无法对其进行模拟。