2012-10-08 5 views
3

Composer에서 PhpUnit을 사용하려고합니다. 이 목적으로 내가 그랬어 : REQ 작곡가 섹션PhpUnit을 사용할 때 작성기가 로더를로드 할 수 없습니다.

1 추가 된 phpunit을을 :

"require": { 
    "php": ">=5.3.0" 
}, 
"require-dev": { 
    "phpunit/phpunit": "3.7.*" 
}, 
"autoload": { 
    "psr-0": {"PhpProject": "src/"} 
} 

이 필요한 것을 설치 :

php composer.phar install --dev

작업이 성공을 마쳤다. 내가 테스트를 실행하고자 할 때

Installing phpunit/phpunit (3.7.6) Downloading: 100%

은 불행히도, 난

./vendor/bin/phpunit PHP Fatal error: Call to a member function add() on a non-object in /home/serek/php/project/tests/bootstrap.php on line 12

문제가 발생

얻을 수 있기 때문에 반환 ComposerAutoloaderInit :: getLoader(); in vendor/autoload는 테스트 부트 스트랩에 NULL을 반환합니다.

로더를 해킹하지 않고 어떻게 해결할 수 있을지 궁금하십니까?

코드 :

> <?xml version="1.0" encoding="UTF-8"?> 
> 
> <phpunit bootstrap="tests/bootstrap.php" colors="true"> 
>  <testsuites> 
>   <testsuite name="PhpProject Test Suite"> 
>    <directory>tests/PhpProject/</directory> 
>   </testsuite> 
>  </testsuites> 
> 
>  <filter> 
>   <whitelist> 
>    <directory suffix=".php">src/PhpProject/</directory> 
>   </whitelist> 
>  </filter> </phpunit> 

테스트/bootstrap.php phpunnit.xml.dist (여기 난 단지 오토로더를 필요)

> $loader = require_once __DIR__ . "/../vendor/autoload.php"; 
> $loader->add('PhpProject\\', __DIR__); //<- this is problematic line 12 (comments has 9 lines) 

/../vendor/autoload.php

// autoload.php generated by Composer 
require_once __DIR__ . '/composer' . '/autoload_real.php'; 
return ComposerAutoloaderInit::getLoader(); 
+1

공유하지 않는 코드 조각에 대해 이야기하고 있습니다.이 코드 조각을 질문에 추가하면 다른 사람들이 쉽게 이해할 수 있습니다. – hakre

+0

명백하게 테스트 부트 스트랩이 오류를 던지지만 코드를 보여주지는 않습니다. 귀하의 가정이 틀릴 수도 있습니다. – Sven

+0

일부 파일 내용이 지금 첨부되어 있습니다 – mrok

답변

11

PHPUnit에서 이미 자동로드 파일이 필요하므로 require_once 호출이 실행되지 않으므로 문제가됩니다. 반환 값은 설정되지 않습니다 (php는 require 호출의 반환 값을 유지하지 않으므로 require_once가 해당 사용 케이스에서 중단됩니다).

최신 작곡가 버전에서는 자동 로더가 두 번 더 이상 생성되지 않아 여러 번 반복해야하므로 매번 동일한 인스턴스가 반환되기 때문에 안전하게 require으로 변경할 수 있습니다.