2013-07-01 5 views
14

나는 항상 서브 클래스 인 \PHPUnit_Framework_TestCase에 섞여 있어야만하는 특성을 가지고 있습니다. PhpStorm은 이것을 모릅니다. PhpStorm을 autocomplete하고 특성에 assertNull 같은 것들을 "typecheck"할 수있는 일이 있습니까?형질의 PhpStorm 자동 완성

<?php 
trait MyTestUtils 
{ 
    public function foo() 
    { 
     $this->assertNu // autocomplete? 
    } 
} 

의 I는 지금까지 각각의 방법에 다음과 가하고 가지고 올 수있는 최고의 :

/** @var \PHPUnit_Framework_TestCase|MyTestUtils $this */ 

하지만이 반복하고 보호 된 멤버들을 이해하지 않습니다. 더 나은 옵션이 있습니까?

+3

ATM이 아닙니다 - http://youtrack.jetbrains.com/issue/WI-16368 (또는 이와 유사하게 http://youtrack.jetbrains.com/issues/WI?q=trait) – LazyOne

+0

soloution을 찾았습니까? 아직? '/ ** @var \ PHPUnit_Framework_TestCase | MyTestUtils $ this */ '이 나를 위해 작동하지 않습니다. –

답변

4

필자는 이것이 PHP 특성에 대한 유효한 유스 케이스는 아니라고 주장합니다. 귀하의 특성은 PHPUnit_Framework_TestCase를 확장 한 클래스에서만 사용될 수 있습니다. 이렇게하면 매우 밀접하게 결합 된 코드가 생성됩니다. 형질의 가장 좋은 관행은 그들이 매우 느슨하게 결합되어 자신의 내용만을 인식하는 것입니다.

  1. 이 기능이 필요한 테스트 케이스는
  2. 사용자 정의 주장 클래스를 만들 확장 할 수있는 \ PHPUnit_Framework_TestCase의 서브 클래스를 만들 :

    내가 대신 당신이 중 하나를하는 것이 좋습니다 것입니다. 이들은 여러 번 사용자 정의 어설 션 그룹을 수행하는 데 사용될 수 있습니다.

두 기술은 여기에 자세히 설명되어 있습니다 : http://phpunit.de/manual/4.1/en/extending-phpunit.html

이이 두 사람이 이와 같은 헬퍼 메소드를 배치하는 위치에 대한 모범 사례를 권장합니다.

+2

나는 단단히 결합 된 형질이 이와 같은 시나리오에서 전적으로 합리적이라고 생각합니다. (대부분) 동적 인 언어에서, 어쨌든 우리는 추상화의 사용자를 안내하는 문서에 의존해야합니다. 수퍼 클래스는 단일 상속으로 인해 임의로 작성하는 것이 어렵다는 문제가 있습니다.어설 션을 원할 때 사용자 정의 어설 션 클래스는 좋지만 한 가지 특별한 경우 일뿐입니다. – mpartel

6

$this, 또한 틀림없이 어쨌든 특성보다 "안전"하게 내가 알고 있어요 유일한 다른 방법을 문서화하기 위해 PHP를 docblock을 사용하는 외에, 특성 자체 예에 추상 메소드를 정의하는 것입니다 :

trait F { 

    /** 
    * @return string[] 
    */ 
    abstract public function Foo(); 

    /** 
    * @return self 
    */ 
    abstract public function Bar(); 
} 

abstract class Bar { 
    use F; 

    /** 
    * @return bool|string[] 
    */ 
    public function Baz() { 
     if ($this->Bar()) { 
      return $this->Foo(); 
     } 

     return false; 
    } 
} 
+3

귀하의 답변은 대단합니다. 이 방법으로 특성 메서드 내부에 존재하는 강력한 의존성을 선언합니다. –

+0

이제는 클라이언트가 내 특성 의존성을 명시 적으로 알고 있습니다. –

5

UPDATE : 특성에서 자동 완성이 아웃 - 오브 - 박스 작동 PhpStorm 2016년 1월 2일 (145.1616를 구축)입니다. 어떤 클래스가 특성을 사용하는지 알아 내고 자동 완성을 제공하는 것이 현명합니다. 문제 링크 : 형질 자체의 docblock에 ...

@method \PHPUnit_Framework_TestCase assertTrue($condition, $message = '') 

을하지만, 단점은 당신이 필요로하는 것이다 :이

당신은 사용할 수 있습니다 : https://youtrack.jetbrains.com/issue/WI-16368

은 이전과 대답 자동 완성을 원할 각 메소드에 대해 @method을 넣으십시오. 이는 특성에서 정상적인 수의 메소드 호출을 사용하는 경우 나쁘지 않습니다. 또는 가장 자주 사용하는 메소드 만 "문서화"하십시오.

+1

'@ method' docblock에 대한 문서 https://www.phpdoc.org/docs/latest/references/phpdoc/tags/method.html – fyrye