2014-03-19 2 views
1

최근 PHPUnit에 문제가있어 확장 기능이 설치되어 있음에도 불구하고 PHPUnit_Extensions_Story_TestCase가 누락되었습니다. 이전에는 pear install phpunit/PHPUnit_Story를 사용하여 설치되었습니다. 이것은 실패한 단위 테스트를 실행하는 경우에만 발생합니다.PHPUnit은 PHPUnit_Extensions_Story_TestCase가 누락되었다고 불평합니다.

ECould not find PHPUnit_Extensions_Story_TestCase 

#0 PHPUnit_Util_Fileloader::{closure}(PHPUnit_Extensions_Story_TestCase) called at [/Users/pedro/Code/Repositories/api-v2/src/XXX/system/Autoloader.php:40] 
#1 Autoloader->autoload(PHPUnit_Extensions_Story_TestCase) 
#2 spl_autoload_call(PHPUnit_Extensions_Story_TestCase) 
#3 class_exists(PHPUnit_Extensions_Story_TestCase) called at [phar:///usr/bin/phpunit/phpunit/Util/Blacklist.php:110] 
#4 PHPUnit_Util_Blacklist->initialize() called at [phar:///usr/bin/phpunit/phpunit/Util/Blacklist.php:74] 
#5 PHPUnit_Util_Blacklist->isBlacklisted(phar:///usr/bin/phpunit/php-invoker/Invoker.php) called at [phar:///usr/bin/phpunit/phpunit/Util/Filter.php:105] 
#6 PHPUnit_Util_Filter::getFilteredStacktrace(PHP_Invoker_TimeoutException Object ([] => Execution aborted after 5 seconds,[] => ,[] => 0,[] => phar:///usr/bin/phpunit/php-invoker/Invoker.php,[] => 111,[] => Array ([0] => Array ([file] => /Users/pedro/Code/Repositories/api-v2/src/XXX/data/adapters/MySQLiAdapter.php,[line] => 160,[function] => callback,[class] => PHP_Invoker,[type] => ->,[args] => Array ([0] => 14)),[1] => Array ([file] => /Users/pedro/Code/Repositories/api-v2/src/XXX/data/adapters/MySQLiAdapter.php,[line] => 306,[function] => query,[class] => XXX\data\adapters\MySQLiAdapter,[type] => ->,[args] => Array ([0] => SELECT * FROM `users` ORDER BY RAND() LIMIT 82)),[2] => Array ([file] => /Users/pedro/Code/Repositories/api-v2/src/XXX/data/objects/Mapper.php,[line] => 138,[function] => select,[class] => XXX\data\adapters\MySQLiAdapter,[type] => ->,[args] => Array ([0] => `users`,[1] => ,[2] => RAND(),[3] => 82)),[3] => Array ([file] => /Users/pedro/Code/Repositories/api-v2/src/XXX/resources/hybrid/Users.php,[line] => 53,[function] => read,[class] => XXX\data\objects\Mapper,[type] => ->,[args] => Array ([0] => RAND(),[1] => 82)),[4] => Array ([function] => read,[class] => XXX\resources\hybrid\Users,[type] => ->,[args] => Array ([0] => XXX\data\objects\Operation Object 

이 마지막으로 실제 문제를 이야기하는 경우까지 더 라인의 얼마나 많은 수백 모르는 방법에 간다 : 그래서, 대신에 "정상"적절한 오류 스택 추적을 가지고, 나는 이런 식으로 뭔가를

Time: 20.35 seconds, Memory: 18.50Mb 

There was 1 failure: 

1) Tests\XXX\resources\hybrid\NotificationsTest::testReadNotificationsWithLimit 
Failed asserting that '4567135422196220076' matches expected 4567135456555958453. 

/Users/pedro/Code/Repositories/api-v2/tests/XXX/resources/hybrid/NotificationsTest.php:168 

FAILURES! 
Tests: 5, Assertions: 15, Failures: 1. 

Generating code coverage report in Clover XML format ... 

저는 PHPUnit 4.0.10을 실행 중이며 PHPUnit_Story-1.0.2를 설치했습니다. 나는 이것이 정상적인 행동이 아니라는 것을 이해하지만, 불행하게도 이것을 제거하는 방법을 모른다. 어떤 제안?

P. -/usr/bin/phpunit 파일을 검사하고 autoload 함수에서 $ classes 배열에 'phpunit_extensions_story_testcase'가있는 항목이 누락되었습니다. 그러나 파일을 편집하려고하면 Phar가 잘못된 서명에 대해 불평합니다.

답변

2

/Users/pedro/Code/Repositories/api-v2/src/XXX/system/Autoloader.php에있는 사용자 정의 오토로더가 40false을 보내는 대신 해당 내용을 출력하고 있습니다. 오토로더의 소스 코드를 보지 않고도 왜 그런 일이 일어나고 있는지 말할 수는 없습니다.

PHP 자동 로더는 클래스를로드 할 수없는 경우 자동으로 return false으로 간주됩니다. 여러 오토로더를 연결할 수 있어야합니다. PHPUnit은 고유 한 오토로더를 사용하여 스펙을 따르지 않는 커스텀 오토로더 때문에 올바르게 실행되지 않습니다.

+0

예, 그런 문제가있었습니다. 사실 클래스가없는 경우 Exception을 던지고있었습니다. 방금 그 코드를 제거하고 "반환"으로 바꿨습니다. 나는 더 이상 그 문제를 가지고 있지 않습니다. 기이 한 일은 PHPUnit 버전 <3.7.32에이 문제가 없었기 때문입니다. 설명해 주셔서 감사합니다. –

+0

필자는 PHPUnit이 3.7.32 이전 버전에서 자체 오토로더를 사용하지 않았다고 믿습니다. 최신 버전에서는 PHPUnit의 오토로더가 작동해야합니다. –

+0

위의 관련 정보를 반복해야합니다. _PHP 오토로더는 클래스를로드 할 수 없으면 자동으로 false를 반환합니다. _ 관련 정보를 찾는데 몇 시간이 걸렸습니다. – mkluwe

0

필자는 PHPUnit 3.7.32로 다운 그레이드하는 것과 동일한 문제가 있으며이를 해결 한 유일한 방법이 있습니다.

+0

@StarsSky 동의하지 않음; 이것은 세계적인 수준의 대답은 아니지만 "잘못된 주 버전을 사용하고 있으며 3.7 시리즈로 돌아갈 필요가 있습니다"라는 대답은 합리적인 답변입니다. – chrylis

0

phpunit 4.x에서 동일한 문제가있었습니다. Yii 1.x 오토로더와 함께 사용할 수 있습니다. 단위 테스트는 정상적으로 작동하지만 일반적으로 코드 적용을 사용하는 즉시 중단됩니다.

면책 조항 다음은 정말 추한하지만 나를 위해 작동합니다 오토로더가 실패하지 않도록

그냥 프로젝트에 빈 클래스를 추가합니다.

<?php 

if(!class_exists('PHPUnit_Extensions_Story_TestCase')) 
{ 
    /** 
    * PHPUnit_Extensions_Story_TestCase 
    * 
    * This skeleton class is added to get code coverage collection using XDebug 
    * and PHPUnit 4.x working again. 
    */ 
    class PHPUnit_Extensions_Story_TestCase 
    { 

    } 
} 
관련 문제