如何在另一个班级的方法中模拟课程?
例如,
protected function buildRequest($params)
{
return new \Request();
}
public function getPayload($params)
{
$request = $this->buildRequest($params);
....
}
我可以模仿buildRequest
吗?
我需要测试此方法getPayload($params)
,但我收到此错误:
Class 'Request' not found in...
答案 0 :(得分:2)
一种选择是引入一个可以创建Request
实例的工厂,并将工厂注入您的班级。你可以把工厂及其创造的东西存根。
另一种选择是扩展您正在测试的类,覆盖您的buildRequest()
方法以返回模拟并通过此扩展测试您的类。
最后,PHPUnit为您提供了创建所谓的部分模拟的能力:
$request = new \Request();
$params = [1, 2, 3];
$foo = $this->getMock(Foo::class, ['buildRequest']);
$foo->expects($this->any())
->method('buildRequest')
->with($this->equalTo($params))
->willReturn($request);
$payload = $foo->getPayload($params);
但是,您的Request
类似乎不存在或自动加载。你需要先解决这个问题。