source

이유, 치명적인 오류: 클래스 'PHPUnit_Framework_'Test Case를 찾을 수 없습니다.

gigabyte 2022. 10. 2. 22:05
반응형

이유, 치명적인 오류: 클래스 'PHPUnit_Framework_'Test Case를 찾을 수 없습니다.

이 PHP 에러가 발생하는 이유는 무엇입니까?

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

2017-02-03에 출시된 버전 6 이상으로 phpunit을 업데이트한 후(예를 들어 composer로), phpunit 코드가 네임슬레이징 되어 있기 때문에 이 에러가 발생할 수 있습니다(changelog 체크).

가 있습니다.\PHPUnit_Framework_TestCase로로 합니다.\PHPUnit\Framework\TestCase

PHPUnit 문서에는 다음과 같이 PHPunit/Framework.php를 포함/요구하는 데 사용됩니다.

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

갱신하다

PHPUnit 3.5 에서는, 이것을 처리하는 오토 로더 클래스가 짜넣어져 있습니다.

require_once 'PHPUnit/Autoload.php';

피닉스가 지적해줘서 고마워!

6.4와 같은 상위 버전의 phpunit의 경우 네임스페이스 PHPUnit\Framework\를 사용해야 합니다.테스트 케이스

PHPUnit_Framework_ 대신 TestCase를 사용합니다.테스트 케이스

// use the following namespace
use PHPUnit\Framework\TestCase;

// extend using TestCase instead PHPUnit_Framework_TestCase
class SampleTest extends TestCase {

}

PHP5에서 PHPnit 테스트를 실행 중이었는데 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_Framework_를 지정해야 합니다.TestCase는 글로벌네임스페이스 앞에 백슬래시를 붙여서 있습니다.

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

저는 서류를 수정하기 위한 대화를 시작하기 위해 PR 원고를 제출했습니다.

PHPUnit 를 인스톨 하면, 커맨드를 실행할 수 있습니다(https://github.com/sebastianbergmann/phpunit/ #syslog-syslog-syslog).

wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
mv phpunit.phar /usr/local/bin/phpunit

단일 테스트 실행

그런 다음 PHPunit 테스트를 실행합니다.

phpunit test.php

테스트 파일의 내용은 다음과 같습니다.

<?php

class StackTest extends PHPUnit_Framework_TestCase
{
    protected function setUp()
    {
    }

    public function testSave()
    {

    }
}

테스트 스위트 실행

demosuite.xml 입니다. demo는 모든 테스트를 포함하는 디렉토리입니다. 스트음음음음음음음음음음음음음음음 test test로 지정해야 합니다.*_test.php )suffix를 참조해 주세요.

<testsuites>
    <testsuite name="DemoTestSuite">
        <directory suffix="test.php">demo</directory>
    </testsuite>
</testsuites>

테스트 스위트는 다음 명령을 사용하여 실행됩니다.

phpunit -c demosuite.xml --testsuite DemoTestSuite

전제 조건:

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

액션:

콘솔에서 다음 명령을 입력합니다.

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

코멘트:

콘솔에서 실행하지 않으려면 새 버전의 PHPunit에 아무것도 포함할 필요가 없습니다.예를 들어 브라우저에서 테스트를 실행하는 경우입니다.

ZF2를 사용하고 있으며 'PHPUnit_Framework'를 대체하면 내 밑에서 일한다.Test Case'에서 '\PHPUnit\Framework\'로테스트 케이스'

와 함께 작업했습니다.

include("vendor/autoload.php");

제 테스트 기능의 최상위에 있습니다.

Centos나 다른 Linux 디스트리뷰션이 있는 경우 phpunit 패키지를 설치해야 합니다.yum install phpunit으로 설치했더니 동작했습니다.저장소를 추가해야 할 수도 있지만 기본 저장소(CentOS 7 탑재)에서는 원활하게 동작해야 한다고 생각합니다.

WordPress 코어 테스트를 실행하고 있으며 최근 PhpUnit을 버전 6으로 업그레이드했을 가능성이 높습니다.그렇다면 최근 PhpUnit 네임스페이스 변경으로 인해 코드가 깨질 수 있습니다.

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

  1. https://core.trac.wordpress.org/changeset/40547 하단에서 Unified Diff 패치를 다운로드합니다.
  2. 패치 파일이 필요하지 않은 경우 패치 파일을 편집하여 패치의 Travis 부분을 제거합니다.파일 맨 위에서 다음 줄 바로 위까지 삭제합니다.

    Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
    
  3. diff를 /includes/directory 위의 디렉토리에 저장합니다.내 경우는 Wordpress 디렉토리 그 자체입니다.

  4. UNIX 패치 도구를 사용하여 파일에 패치를 적용합니다.또한 절대 디렉토리 구조에서 상대 디렉토리 구조로 이동하려면 처음 몇 개의 슬래시를 제거해야 합니다.위의 포인트3에서 알 수 있듯이 include 디렉토리 앞에는 슬래시가 5개 있습니다.-p5 플래그는 이 슬래시를 삭제합니다.

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

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

주의: 명령어php bin/console generate:doctrine:crud작성하다TestControllersrc/Tests서버 부팅 시 오류가 발생할 수 있습니다.UnitTests. 파일을 삭제하여 수정하십시오!

저는 달리기를 했기 때문에

$ phpunit .

대신

$ phpunit

이미 설정이 끝난 상태일 때phpunit.xml파일을 작업 디렉토리에 저장합니다.

zend 1.12 버전이 추가된 윈도우 10에서 php 5.6을 사용하고 있습니다.

require_once 'PHPUnit/Autoload.php';

전에

추상 클래스 Zend_Test_PHPUnit_ControllerTestCase는 PHPunit_Framework_를 확장합니다.테스트 케이스

동작했습니다. 위의 스테이트먼트를 ControllerTestCase.php 파일에 추가해야 합니다.

언급URL : https://stackoverflow.com/questions/6065730/why-fatal-error-class-phpunit-framework-testcase-not-found-in

반응형