【发布时间】:2015-12-19 02:30:32
【问题描述】:
我有以下设置:我正在使用 PHPUnit 模拟非抽象类,但不是所有方法。因此,非模拟方法仍然作为对模拟中真实方法的调用存在。
问题是:如何暗示这些方法是可用的(当然,有正确的签名)?
我会详细说明一下。班级样本:
class RealClass
{
public function callApi(Api $api) {}
public function doStuff(Foo $foo, Bar $bar) {}
}
现在我在做测试:
/** @var \PHPUnit_Framework_MockObject_MockObject $mock */
$mock = $this->getMock('\RealClass', ['callApi']);
这将仅为callApi() 创建模拟,但如果在测试中我这样做:
$mock->doStuff($foo, $bar);
我的 PHPStorm 显然找不到该方法,并认为这是一个错误。我如何指出 doStuff() 方法存在并且需要正确的参数?
@method 似乎只在类定义中工作。我试着和@see 玩了一下,但无法解决这个问题。此外,理想的解决方案是允许在 return 语句中指定提示的解决方案,因为我可能希望从测试助手方法返回模拟。
“便宜的作弊”是暗示与原来的类,但我不想这样做,从那以后我就会失去意义——这是模拟的,哪个不是。这一点尤其重要,因为我使用助手来构建注入模拟的复杂实体。
【问题讨论】:
标签: mocking phpunit phpstorm phpdoc