이 PHP 오류가 발생하는 이유는 무엇입니까?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
이 PHP 오류가 발생하는 이유는 무엇입니까?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
답변:
phpunit을 문서를 말한다 phpunit을 / Framework.php를 포함 / 요구하는 말을 사용하는 등 다음과 같습니다 :
require_once ('PHPUnit/Framework/TestCase.php');
최신 정보
PHPUnit 3.5부터는이를 처리 할 수있는 내장 오토로더 클래스가 있습니다 :
require_once 'PHPUnit/Autoload.php';
이것을 지적 해준 Phoenix에게 감사합니다!
PHPUnit/Autoload.php
및 PHPUnit/Framework/TestCase.php
내 폴더 종류 등이며,PHPUnit/Framework/MockObject
PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
phpunit을 2017-02-03에 릴리스 된 버전 6 이상으로 업데이트 한 후 여기에 도착하는 사람들 (예 : 작곡가가있는)의 경우 phpunit 코드가 네임 스페이스이기 때문에이 오류가 발생할 수 있습니다 ( changelog 확인 ).
다음과 같은 것들을 리팩토링해야 \PHPUnit_Framework_TestCase
합니다.\PHPUnit\Framework\TestCase
에 대한 높은 버전 과 같은 phpunit을의 6.4 네임 스페이스를 사용해야합니다 phpunit을 \ 프레임 워크 \의 TestCase를
사용 의 TestCase 대신 PHPUnit_Framework_TestCase
// use the following namespace
use PHPUnit\Framework\TestCase;
// extend using TestCase instead PHPUnit_Framework_TestCase
class SampleTest extends TestCase {
}
파일 이름을 지정했기 때문에이 오류가 발생할 수 있습니다. 그렇다면 PHPUnit_Framework_TestCase가 백 슬래시로 시작하여 글로벌 네임 스페이스에 있도록 지정해야합니다.
namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}
class YourNiceTest extends PHPUnit_Framework_TestCase
과 같이 확장 된 클래스 앞에 \를 추가하면됩니다 class YourNiceTest extends \PHPUnit_Framework_TestCase
.-다음 Symfony 2.8
과 phpunit
같이 로컬 종속성으로 다운로드 된 작곡가 파일에 사용 하고 포함 하여 다음 과 같이 작동했습니다."phpunit/phpunit": "^4.8"
PHP5에서 PHPUnit 테스트를 실행 한 후 PHP7도 지원해야했습니다. 이것이 내가 한 일입니다.
composer.json에서 :
"phpunit/phpunit": "~4.8|~5.7"
내 PHPUnit 부트 스트랩 파일 (내 경우에는 /tests/bootstrap.php
) :
// PHPUnit 6 introduced a breaking change that
// removed PHPUnit_Framework_TestCase as a base class,
// and replaced it with \PHPUnit\Framework\TestCase
if (!class_exists('\PHPUnit_Framework_TestCase') && class_exists('\PHPUnit\Framework\TestCase'))
class_alias('\PHPUnit\Framework\TestCase', '\PHPUnit_Framework_TestCase');
다시 말해, 이것은 원래 PHPUnit 4 또는 5 용으로 작성된 테스트에 대해 작동하지만 PHPUnit 6에서도 작동해야했습니다.
PHPUnit을 설치하여 명령을 실행할 수 있습니다 ( https://github.com/sebastianbergmann/phpunit/#php-archive-phar ) :
wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
mv phpunit.phar /usr/local/bin/phpunit
단일 테스트 실행
그런 다음 PHPunit test를 실행하십시오.
phpunit test.php
테스트 파일의 내용은 다음과 같습니다.
<?php
class StackTest extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
}
public function testSave()
{
}
}
테스트 스위트 실행
테스트 스위트 구성 : demosuite.xml. demo
모든 테스트가 포함 된 디렉토리입니다. 테스트 파일 이름은 *_test.php
( suffix
) 로 지정해야합니다 .
<testsuites>
<testsuite name="DemoTestSuite">
<directory suffix="test.php">demo</directory>
</testsuite>
</testsuites>
테스트 스위트는 다음 명령으로 실행됩니다.
phpunit -c demosuite.xml --testsuite DemoTestSuite
PHPUnit_Framework_TestCase
. 당신은 정말 사용이... extends PHPUnit\Framework\TestCase
mv phpunit /usr/local/bin/phpunit
하고 나서야한다는 것 sudo chmod +x /usr/local/bin/phpunit
. 이동하기 전에 파일을 실행 파일로 설정하면 Vagrant Ubuntu에서 작동하지 않았습니다. 왜 그런지 모르겠지만 ... 누군가이 문제로 어려움을 겪고있는 경우 이것이 도움이되기를 바랍니다.
ZF2를 사용하고 'PHPUnit_Framework_TestCase'를 '\ PHPUnit \ Framework \ TestCase'로 바꾸면 나를 위해 일합니다.
WordPress 핵심 테스트를 실행 중이고 최근에 PhpUnit을 버전 6으로 업그레이드 한 것일 수도 있습니다.이 경우 PhpUnit의 네임 스페이스 변경에 대한 최근 변경으로 인해 코드가 손상되었을 수 있습니다.
다행히도 https://core.trac.wordpress.org/changeset/40547 의 핵심 테스트에 대한 패치가 있으며이 문제를 해결할 수 있습니다. 또한 설정에 없을 수도있는 travis.yml에 대한 변경 사항도 포함되어 있습니다. 이 경우 Travis 패치를 무시하려면 .diff 파일을 편집해야합니다.
패치 파일이 필요없는 경우 패치 파일을 편집하여 패치의 Travis 부분을 제거하십시오. 파일 상단에서이 줄 바로 위까지 삭제하십시오.
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
diff를 / includes / 디렉토리 위의 디렉토리에 저장하십시오. 내 경우에는 Wordpress 디렉토리 자체였습니다.
Unix 패치 도구를 사용하여 파일을 패치하십시오. 또한 처음 몇 개의 슬래시를 제거하여 절대 디렉토리에서 상대 디렉토리 구조로 이동해야합니다. 위의 3 지점에서 볼 수 있듯이 include 디렉토리 앞에 5 개의 슬래시가 있으며 -p5 플래그가 제거됩니다.
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
이 작업을 수행 한 후 테스트가 다시 올바르게 실행되었습니다.
주의 사항 : 명령 php bin/console generate:doctrine:crud
도 생성 TestController
에 src/Tests
당신은 당신이없는 경우 서버를 시작하려고 할 때이 오류가 발생 할 수 있습니다 UnitTests
. 파일을 제거하여 수정하십시오!