如何在另一个类的方法中模拟该类?
例如,
protected function buildRequest($params)
{
return new \Request();
}
public function getPayload($params)
{
$request = $this->buildRequest($params);
....
}
我可以模拟 buildRequest
吗?
我需要测试此方法 getPayload($params)
但我收到此错误:
Class 'Request' not found in...
最佳答案
一个选择是引入一个工厂来创建一个Request
实例,并将该工厂注入(inject)到您的类中。您将能够 stub 工厂及其创建的任何内容。
另一种选择是扩展您正在测试的类,覆盖您的 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
类似乎不存在或无法自动加载。你需要先解决这个问题。
关于unit-testing - PHPUnit - 如何在另一个类的方法中模拟该类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35334068/