2016-06-20 4 views
0
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가 존재하지 않는다고 알려줍니다. 방법을 자동 완성 할 수있는 플러그인을 검색했습니다. 이 플러그인이 있습니까?PhpStorm PHPUnit support

+0

당신이 정의하는 'doSomething' 예상되는 경우? 이것이 바로 "hello world"단위 테스트 일 뿐인 경우, 직접 메서드를 정의하고 스텁링하지 않는 것이 어떻습니까? –

답변

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에 알립니다.

0

우리는 Dynamic Return Type-plugin을 사용하여 PHPUnit의 유형 힌트를 향상시킵니다. 완벽하지는 않지만 쉽게 설정하고 사용할 수 있습니다. 플러그인을 사용하면 매개 변수의 값을 기반으로 메소드에 대한 리턴 유형을 정의 할 수 있습니다.

다음 내용을 프로젝트의 루트에 파일 dynamicReturnTypeMeta.json을 추가

{ 
    "methodCalls": [ 
     { 
      "class": "\\PHPUnit_Framework_TestCase", 
      "method": "createMock", 
      "position": 0, 
      "mask": "%s|PHPUnit_Framework_MockObject_MockObject" 
     } 
    ], 
    "functionCalls": [] 
}