为什么,致命错误:在…中找不到类“ PHPUnit_Framework_TestCase”?

| 为什么我收到此PHP错误?
Fatal error: Class \'PHPUnit_Framework_TestCase\' not found in ...
    
已邀请:
PHPUnit文档说过去曾说要包含/要求PHPUnit / Framework.php,如下所示:
require_once (\'PHPUnit/Framework/TestCase.php\');
更新 从PHPUnit 3.5开始,有一个内置的autoloader类将为您处理此问题:
require_once \'PHPUnit/Autoload.php\';
感谢Phoenix指出这一点!     
对于将phpunit更新到2017-02-03上发布的版本6或更高版本(例如,使用作曲家)之后到达此处的用户,您可能会收到此错误,因为phpunit代码现在已命名(请检查changelog)。 您需要将
\\PHPUnit_Framework_TestCase
重构为
\\PHPUnit\\Framework\\TestCase
    
对于更高版本的phpunit,例如6.4 您必须使用命名空间PHPUnit \\ Framework \\ 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 {}
我提交了一个粗略的PR,开始进行对话以更正文档。     
我在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测试:
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(3.7)在控制台环境中可用。 行动: 在控制台中输入以下命令:
SHELL> phpunit \"{{PATH TO THE FILE}}\"
注释: 除非您不想在控制台中运行,否则不需要在新版本的PHPUnit中包含任何内容。例如,在浏览器中运行测试。     
如果您具有Centos或其他Linux发行版,则必须安装phpunit软件包,而我使用yum install phpunit做到了这一点,并且可以正常工作。也许您可能必须添加一个存储库,但是我认为它必须能够与默认存储库一起顺利运行(我有CentOS 7)     
很有可能您正在运行WordPress核心测试,并且最近已将您的PhpUnit升级到了版本6。 幸运的是,https://core.trac.wordpress.org/changeset/40547上有一个针对核心测试的补丁程序,可以解决该问题。它还包括对travis.yml的更改,您可能没有在设置中进行更改;如果真是这样,那么您需要编辑.diff文件以忽略Travis补丁。 从https://core.trac.wordpress.org/changeset/40547底部下载\“ Unified Diff \”补丁 如果不需要,请编辑补丁文件以删除补丁的Travis部分。从文件顶部删除到此行的上方:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
将差异保存在/ includes /目录上方的目录中-在我的情况下,这是Wordpress目录本身 使用Unix补丁工具来补丁文件。您还需要去除前几个斜杠才能从绝对目录结构移到相对目录结构。从上面的第3点可以看出,include目录前有五个斜杠,-p5标志将为您消除。
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff 
完成此操作后,我的测试将再次正确运行。     
注意:命令
php bin/console generate:doctrine:crud
还会在
src/Tests
中创建
TestController
,因此如果您没有
UnitTests
,则在尝试启动服务器时会抛出错误。删除文件修复吧!     
对我来说,是因为我跑了
$ phpunit .
代替
$ phpunit
当我在工作目录中已经有一个已配置的
phpunit.xml
文件时。     
我正在使用zend 1.12版本的窗口10上使用php 5.6为我添加   require_once \'PHPUnit / Autoload.php \'; 之前   抽象类Zend_Test_PHPUnit_ControllerTestCase扩展   PHPUnit_Framework_TestCase 工作了。我们需要在ControllerTestCase.php文件中添加以上语句     
我使用ZF2,将\'PHPUnit_Framework_TestCase \'替换为\'\ PHPUnit \\ Framework \\ TestCase \'时为我工作     

要回复问题请先登录注册