PhpStorm PHPUnit支持

时间:2016-06-20 08:43:09

标签: phpunit phpstorm

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不存在。我搜索了任何可以自动完成方法的插件。有插件吗?

2 个答案:

答案 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": []
}