为什么我收到此PHP错误?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
为什么我收到此PHP错误?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Answers:
该PHPUnit文档 说过去常说,包括/需要的PHPUnit / Framework.php,如下所示:
require_once ('PHPUnit/Framework/TestCase.php');
更新
从PHPUnit 3.5开始,有一个内置的autoloader类将为您处理此问题:
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 \ 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 {}
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测试:
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”时为我工作
如果您具有Centos或其他Linux发行版,则必须安装phpunit软件包,而我使用yum install phpunit做到了这一点,并且可以正常工作。也许您可能必须添加一个存储库,但是我认为它必须与默认存储库一起流畅运行(我有CentOS 7)
很有可能是您正在运行WordPress核心测试,并且最近已将您的PhpUnit升级到了版本6。
幸运的是,https: //core.trac.wordpress.org/changeset/40547上有一个针对核心测试的补丁,可以解决该问题。它还包括对travis.yml的更改,您可能没有在设置中进行更改;如果真是这样,那么您需要编辑.diff文件以忽略Travis补丁。
如果不需要,请编辑补丁文件以删除补丁的Travis部分。从文件顶部删除到此行的上方:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
将差异保存在/ includes /目录上方的目录中-在我的情况下,这是Wordpress目录本身
使用Unix修补程序工具修补文件。您还需要去除前几个斜杠,以从绝对目录结构转换为相对目录结构。从上面的第3点可以看出,include目录前有五个斜杠,-p5标志将为您消除。
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
完成此操作后,我的测试将再次正确运行。