2016-07-06 11 views
1

에서 찾을 수 없습니다 세 번째 파일 인 TestUtils.php에 유틸리티 메서드를 추가 할 때까지 테스트가 끝났습니다. MySDKTest.php에서 TestUtils::utilityMethod()으로 전화를 걸면 phpunit에서 TestUtils 클래스를 찾을 수 없다는 메시지가 나타납니다.작곡가 PSR-4 phpunit을 클래스는 나는 다음과 같은 프로젝트 구조 내 composer.json 파일은 다음과 같습니다 <pre><code>src/ ├─ MyPackage/ ├─ MySDK.php └─ SDKHelper.php test/ ├─ MySDKTest.php └─ TestUtils.php composer.json composer.lock </code></pre> <p>이</p> 한 같은 디렉토리

필자가 시도한 변형 인 autoload-dev 키를 추가하는 것에 대해 읽었지만 지금까지 아무 것도 작동하지 않는 것처럼 보입니다. MySDKTest 안에 MySDKSDKHelper 메서드를 사용할 수 있음을 분명히해야합니다. 그것이 작동 할 때 MySDKTest.php은 다음과 같습니다

use MyPackage\MySDK; 

class MySDKTest extends PHPUnit_Framework_TestCase { 

    public function testPackage() { 
     $sdk = new MySDK(); 
     $sdk->exampleMethod(); 
    } 
} 
+0

을, 당신은 항상 정확하게 작동하지 않았다 시도 것을 언급해야한다. 이렇게하면 오류를 쉽게 찾아 낼 수 있습니다. * autoload-dev 키를 추가하는 방법에 대해 읽은 적이 있습니다. * 내가 시도한 바리에이션은 작업을 완료 했어야한다고 생각하는 적어도 하나의 예제를 보여줍니다. 이미 작동하는 코드가 아니라로드 할 수없는 코드도 표시하십시오. 즉, MySDKTest.php가 아닌 'TestUtils.php'콘텐츠가 필요합니다. – Sven

+0

안녕하세요, @ Sven,이 질문에 대해 잊어 버렸습니다. 그것이 나왔던 것에 따라, 나는 실제로 모든 것을 올바르게하고 있었다. 'composer.phar install'을 실행하면 업데이트 된 autoload.php가 생성되어 문제가 해결되었습니다. 필자가 사용한'autoload-dev' 설정을 추가 할 것입니다. – arik

답변

1

그것은 아주 간단해야한다. Composer의 PSR-4 오토로더는 네임 스페이스에서 폴더로의 매핑을 정의합니다.

테스트 이름 공간이 올바 릅니까? 테스트 클래스 상단에 use이 있으니 이후에는 그렇지 않은 것 같습니다. 이 MyPackage (정규화 된 MyPackage\MySDK)의 이름 인 경우 MySDKTestMyPackage 네임 스페이스의 MyPackage\MySDKTest에 있어야합니다. 그럴 필요는 없습니다. 원하는 경우 다른 네임 스페이스에 테스트를 넣을 수 있습니다.

자동 로더에 테스트 폴더를 등록하지 않은 이유는 무엇이든지 작동하지 않기 때문입니다. 물건이 현재 설정되어있는 것처럼 보이는 방법은, 오토로더의 설정은 다음과 같아야합니다

{ 
    "autoload": { 
     "psr-4": { "MyPackage\\": ["src/MyPackage/", "test/"] } 
    } 
} 

은 또한 당신이 당신의 테스트 클래스에 namespace MyPackage;use MyPackage\MySDK;을 변경해야 할 것입니다.


귀하의 폴더 구조가 좀 이상해. testsrc과 일치 할 것으로 예상됩니다. 그래서 다음과 같이 될 것이다 :

test/ 
    ├─ MyPackage/ 
     ├─ MySDK.php 
     └─ SDKHelper.php 

그에 따라 네임 스페이스를 조정 : 좋은 질문에 대한

{ 
    "autoload": { 
     "psr-4": { "MyPackage\\": ["src/MyPackage", "test/MyPackage"] } 
    } 
} 
+0

테스트 코드를 프로덕션 코드와 분리하는 작업은'autoload-dev' 작업이므로'test'를 포함하는 경로를'autoload'로 섞을 필요가 없습니다. – Sven