class MainTest extends TestCase
{
public function testMain()
{
$stub = $this->createMock(Project\NotImplementedClass::class);
$stub->method('doSomething')
->will($this->returnCallback(function ($string) {
return strtoupper($string);
}));
$this->assertEquals('ABC', $stub->doSomething('abc'));
}
}
PhpStorm告诉方法doSomething
不存在。我搜索了任何可以自动完成方法的插件。有插件吗?
答案 0 :(得分:1)
PHPStorm的自动完成功能在很大程度上依赖于类型提示。在您的情况下 - 由于$this->createMock()
将返回PHPUnit_Framework_MockObject_MockObject
,但没有该方法会抱怨。
你可以做的是"覆盖"变量的类型提示:
/** @var Project\NotImplementedClass|PHPUnit_Framework_MockObject_MockObject $stub */
$stub = $this->createMock(Project\NotImplementedClass::class);
或者您可以将模拟创建放在具有类似@return
docblock的方法中。
这将告诉PHPStorm查看两个类的自动完成。
答案 1 :(得分:0)
我们使用Dynamic Return Type-plugin来改进PHPUnit的类型提示。它并不完美,但易于设置和使用。该插件允许您根据参数值定义方法的返回类型。
使用以下内容将文件dynamicReturnTypeMeta.json
添加到项目的根目录:
{
"methodCalls": [
{
"class": "\\PHPUnit_Framework_TestCase",
"method": "createMock",
"position": 0,
"mask": "%s|PHPUnit_Framework_MockObject_MockObject"
}
],
"functionCalls": []
}