lau*_*kok 4 phpunit unit-testing mocking
如何在另一个类的方法中模拟该类?
例如,
protected function buildRequest($params)
{
return new \Request();
}
public function getPayload($params)
{
$request = $this->buildRequest($params);
....
}
Run Code Online (Sandbox Code Playgroud)
我可以嘲笑吗buildRequest
?
我需要测试这个方法getPayload($params)
,但出现以下错误:
Class 'Request' not found in...
Run Code Online (Sandbox Code Playgroud)
一种选择是引入一个可以创建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);
Run Code Online (Sandbox Code Playgroud)
但是,您的Request
课程似乎不存在或不自动加载。您需要首先解决这个问题。