치명적인 오류 : 'PHPUnit_Framework_TestCase'클래스를…에서 찾을 수없는 이유는 무엇입니까?


127

이 PHP 오류가 발생하는 이유는 무엇입니까?

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...

9
정보를 전혀 제공하지 않습니다.
Pekka

phpunit 명령 줄을 통해 테스트를 실행하십시오. 필요한 클래스를로드합니다.
Halfstop

다음 답변의 답변을 stackoverflow.com/questions/42811164/… 에서 사용 하여 코드를 PHPUnit 6 및 이전 버전과 호환되도록 유지할 수 있습니다.
Robson

답변:


73

phpunit을 문서를 말한다 phpunit을 / Framework.php를 포함 / 요구하는 말을 사용하는 등 다음과 같습니다 :

require_once ('PHPUnit/Framework/TestCase.php');

최신 정보

PHPUnit 3.5부터는이를 처리 할 수있는 내장 오토로더 클래스가 있습니다 :

require_once 'PHPUnit/Autoload.php';

이것을 지적 해준 Phoenix에게 감사합니다!


14
PHPUnit 3.5에는 간단한 자동 상태를 유지하는 데 도움이되는 자체 오토로더가 있습니다 : require_once 'PHPUnit/Autoload.php'

1
require_once ( 'PHPUnit / Autoload.php')가 모범 사례라고 동의합니다.
Paul Maidment

1
둘 다이없는 PHPUnit/Autoload.phpPHPUnit/Framework/TestCase.php내 폴더 종류 등이며,PHPUnit/Framework/MockObject
Sufendy

4
그리고 지금 나는 PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
Dennis

1
PHP 6+에 대한 @shadi의 답변을 참조하십시오 stackoverflow.com/a/42561590/2883328
Dennis

237

phpunit을 2017-02-03에 릴리스 된 버전 6 이상으로 업데이트 한 후 여기에 도착하는 사람들 (예 : 작곡가가있는)의 경우 phpunit 코드가 네임 스페이스이기 때문에이 오류가 발생할 수 있습니다 ( changelog 확인 ).

다음과 같은 것들을 리팩토링해야 \PHPUnit_Framework_TestCase합니다.\PHPUnit\Framework\TestCase


4
감사합니다. Travis CI로 인해 PHP 7 빌드에서 최신 PHPUnit 버전을 사용했기 때문에이 문제가 발생했습니다. 내 수정은 수동으로 오래된 phar를 다운로드하여 대신 사용하는 것이 었습니다.
DisgruntledGoat

2
github.com/sebastianbergmann/phpunit/wiki/… 릴리즈 노트 상단에 있지만 아직 놓쳤습니다
Qchmqs

친절하게 감사합니다. 실제로 버전 6으로 업그레이드 한 후 여기에 도착합니다.
h4ckNinja

내 테스트가 갑자기 작동을 멈췄다는 사실에 정말 화가났다. 작곡가 업데이트를 수행하여 PHPunit을 6.1로 업데이트했습니다. 감사합니다.
Jed Lynch

38

에 대한 높은 버전 과 같은 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 {

}

내가 늙은 튜토리얼 다음되면서이 나를 위해 일한 우수

당신은 shadi의 답변을 방금 복사했습니다
Adam

@ 아담은 누구입니까?
Jijesh Cherrai

나는 그런 것을 모른다. 나는 그때 패키지 균열에 의해 답을 찾아 같은 오류가 발생했습니다
Jijesh Cherrai

13

파일 이름을 지정했기 때문에이 오류가 발생할 수 있습니다. 그렇다면 PHPUnit_Framework_TestCase가 백 슬래시로 시작하여 글로벌 네임 스페이스에 있도록 지정해야합니다.

namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}

나는 문서 를 수정하기 위해 대화를 시작하기 위해 원유 PR 을 제출 했습니다 .


1
예,이 작업을 수행 한 경우 다음 class YourNiceTest extends PHPUnit_Framework_TestCase과 같이 확장 된 클래스 앞에 \를 추가하면됩니다 class YourNiceTest extends \PHPUnit_Framework_TestCase.-다음 Symfony 2.8phpunit같이 로컬 종속성으로 다운로드 된 작곡가 파일에 사용 하고 포함 하여 다음 과 같이 작동했습니다."phpunit/phpunit": "^4.8"
Xavi Montero

12

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에서도 작동해야했습니다.


1
이 솔루션은 Civi \ Test 코드를 건드리지 않고 최신 네임 스페이스 기반 PHP 단위 테스트와 호환되어야하는 경우에 중요합니다
Shahadat Hossain Khan

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

3
최신 PHPUnit은 더 이상 같은 이전 클래스 이름을 지원하지 않기 때문에 더 이상 작동하지 않습니다 PHPUnit_Framework_TestCase. 당신은 정말 사용이... extends PHPUnit\Framework\TestCase
미코 Rantalainen

내가 먼저 mv phpunit /usr/local/bin/phpunit하고 나서야한다는 것 sudo chmod +x /usr/local/bin/phpunit. 이동하기 전에 파일을 실행 파일로 설정하면 Vagrant Ubuntu에서 작동하지 않았습니다. 왜 그런지 모르겠지만 ... 누군가이 문제로 어려움을 겪고있는 경우 이것이 도움이되기를 바랍니다.
George Mylonas

4

인수:

Phpunit (3.7) 은 콘솔 환경에서 사용할 수 있습니다.

동작:

콘솔에 다음 명령을 입력하십시오.

SHELL> phpunit "{{PATH TO THE FILE}}"

코멘트:

콘솔에서 실행하지 않으려면 새 버전의 PHPUnit에 아무것도 포함하지 않아도됩니다. 예를 들어 브라우저에서 테스트를 실행합니다.



0

Centos 또는 다른 Linux 배포판이있는 경우 phpunit 패키지를 설치해야합니다. yum install phpunit으로 설치하면 효과가 있습니다. 아마도 저장소를 추가해야 할 수도 있지만 기본 저장소와 원활하게 작동해야한다고 생각합니다 (CentOS 7이 있습니다)


0

WordPress 핵심 테스트를 실행 중이고 최근에 PhpUnit을 버전 6으로 업그레이드 한 것일 수도 있습니다.이 경우 PhpUnit의 네임 스페이스 변경에 대한 최근 변경으로 인해 코드가 손상되었을 수 있습니다.

다행히도 https://core.trac.wordpress.org/changeset/40547 의 핵심 테스트에 대한 패치가 있으며이 문제를 해결할 수 있습니다. 또한 설정에 없을 수도있는 travis.yml에 대한 변경 사항도 포함되어 있습니다. 이 경우 Travis 패치를 무시하려면 .diff 파일을 편집해야합니다.

  1. https://core.trac.wordpress.org/changeset/40547 하단에서 "Unified Diff"패치를 다운로드 하십시오.
  2. 패치 파일이 필요없는 경우 패치 파일을 편집하여 패치의 Travis 부분을 제거하십시오. 파일 상단에서이 줄 바로 위까지 삭제하십시오.

    Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
  3. diff를 / includes / 디렉토리 위의 디렉토리에 저장하십시오. 내 경우에는 Wordpress 디렉토리 자체였습니다.

  4. Unix 패치 도구를 사용하여 파일을 패치하십시오. 또한 처음 몇 개의 슬래시를 제거하여 절대 디렉토리에서 상대 디렉토리 구조로 이동해야합니다. 위의 3 지점에서 볼 수 있듯이 include 디렉토리 앞에 5 개의 슬래시가 있으며 -p5 플래그가 제거됩니다.

    $ cd [WORDPRESS DIRECTORY]
    $ patch -p5 < changeset_40547.diff 

이 작업을 수행 한 후 테스트가 다시 올바르게 실행되었습니다.


0

주의 사항 : 명령 php bin/console generate:doctrine:crud도 생성 TestControllersrc/Tests당신은 당신이없는 경우 서버를 시작하려고 할 때이 오류가 발생 할 수 있습니다 UnitTests. 파일을 제거하여 수정하십시오!


0

나를 위해, 내가 도망했기 때문에

$ phpunit .

대신에

$ phpunit

phpunit.xml작업 디렉토리에 이미 구성된 파일 이있을 때


0

zend 1.12 버전으로 창 10에서 PHP 5.6을 사용하고 있습니다.

require_once 'PHPUnit / Autoload.php';

전에

추상 클래스 Zend_Test_PHPUnit_ControllerTestCase는 PHPUnit_Framework_TestCase를 확장합니다.

일했다. ControllerTestCase.php 파일에 위의 문장을 추가해야합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.