嘲弄 – 模拟类:方法暗示
发布时间:2020-12-13 16:58:09 所属栏目:PHP教程 来源:网络整理
导读:我有以下设置:我用 PHPUnit模拟非抽象类,但不是所有的方法.因此,非模拟方法仍然存在于模拟中对实际方法的调用. 问题是:如何暗示这些方法是可用的(当然,有正确的签名)? 我会详细说明一下.课程样本: class RealClass{ public function callApi(Api $api) {
我有以下设置:我用
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玩一下但是无法解决这个问题.此外,理想的解决方案是允许在返回语句中指定提示的解决方案,因为我可能希望从测试帮助程序方法返回模拟. “廉价作弊”是暗示原始的类,但我不想做,从那时起我将失去重点 – 这是嘲笑,哪些不是.这尤其重要,因为我正在使用帮助器来构建注入模拟的复杂实体. 解决方法
你应该将mock暗示为MockObject或RealClass的一个实例,所以你会得到类似的东西:
/** @var RealClass|PHPUnit_Framework_MockObject_MockObject $mock */ $mock = $this->getMock('RealClass',['callApi']); 现在你告诉PhpStorm $mock可以是PHPUnit MockObject或RealClass实例,它将从任一类接受/自动完成方法. 另外(这只是一个友好的建议而且根本不需要),你可以使用use关键字将类导入到测试类中,这样你的提示就会变得更具可读性: <?php use RealClass; use PHPUnit_Framework_MockObject_MockObject as MockObject; class YourTestClass { public function yourTest() { // Because of the use statements (and the "as" alias rule) you can now: /** @var RealClass|MockObject $mock */ $mock = $this->getMock('RealClass',['callApi']); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |