phpunit/framework.php,php - 为什么,致命错误:在'...中找不到类'PHPUnit_Framework_TestCase'?...

php - 为什么,致命错误:在'...中找不到类'PHPUnit_Framework_TestCase'?

为什么我收到此PHP错误?

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

12个解决方案

194 votes

对于那些在将2017-02unit更新到在2017-02-03上发布的版本6或更高版本到达此处的人(例如使用作曲家),您可能会收到此错误,因为phpunit代码现在已命名为namespaced(检查更改日志)。

您需要将\PHPUnit_Framework_TestCase之类的东西重构为\PHPUnit\Framework\TestCase

shadi answered 2019-07-09T17:17:03Z

68 votes

PHPUnit文档曾经说过要包含/ require PHPUnit / Framework.php,如下所示:

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

UPDATE

从PHPUnit 3.5开始,有一个内置的自动加载器类可以为您处理:

require_once 'PHPUnit/Autoload.php';

感谢凤凰城指出这一点!

defines answered 2019-07-09T17:16:30Z

24 votes

对于更高版本的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 {

}

Jijesh Cherrai answered 2019-07-09T17:17:35Z

13 votes

您可能会因为命名文件而收到此错误。 如果是这样,您需要通过在其前面加上反斜杠来指定PHPUnit_Framework_TestCase在全局命名空间中:

namespace AcmeInc\MyApplication\Tests

class StackTest extends \PHPUnit_Framework_TestCase {}

我提交了一份粗糙的PR来开始对话以纠正文档。

Bevan answered 2019-07-09T17:18:11Z

9 votes

我在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上工作。

Nino Škopac answered 2019-07-09T17:18:59Z

5 votes

您只需安装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

测试文件的内容如下:

class StackTest extends PHPUnit_Framework_TestCase

{

protected function setUp()

{

}

public function testSave()

{

}

}

运行测试套件

测试套件的配置:demosuite.xml。 demo是包含所有测试的目录。 测试文件必须命名为*_test.php(suffix)。

demo

测试套件使用以下命令运行:

phpunit -c demosuite.xml --testsuite DemoTestSuite

radeklos answered 2019-07-09T17:20:15Z

4 votes

假设:

Phpunit(3.7)可在控制台环境中使用。

行动:

在控制台中输入以下命令:

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

评论:

除非您不想在控制台中运行,否则不需要在新版本的PHPUnit中包含任何内容。 例如,在浏览器中运行测试。

svirk answered 2019-07-09T17:21:11Z

0 votes

如果您有Centos或其他Linux发行版,您必须安装phpunit包,我使用yum install phpunit做到了它并且它有效。 也许你可以添加一个存储库,但我认为它必须与默认存储库一起工作(我有CentOS 7)

Ricardo Herrero answered 2019-07-09T17:21:38Z

0 votes

您可能正在运行WordPress核心测试,并且最近已将您的PhpUnit升级到版本6.如果是这样,那么最近对PhpUnit中命名空间的更改将破坏您的代码。

幸运的是,[https://core.trac.wordpress.org/changeset/40547]的核心测试有一个补丁,可以解决这个问题。 它还包括对travis.yml的更改,您可能在设置中没有这些更改; 如果是这种情况,那么您需要编辑.diff文件以忽略Travis补丁。

下载"统一差异" 来自[https://core.trac.wordpress.org/changeset/40547]底部的补丁

如果您不需要,请编辑补丁文件以删除补丁的Travis部分。 从文件顶部删除到此行的正上方:

$ cd [WORDPRESS DIRECTORY]

$ patch -p5 < changeset_40547.diff

将diff保存在/ includes /目录上方的目录中 - 在我的例子中,这是Wordpress目录本身

使用Unix修补程序工具修补文件。 您还需要剥离前几个斜杠以从绝对目录结构移动到相对目录结构。 从上面的第3点可以看出,include目录之前有5个斜杠,-p5标志将为你摆脱。

$ cd [WORDPRESS DIRECTORY]

$ patch -p5 < changeset_40547.diff

我这样做后,我的测试再次正确运行。

piersb answered 2019-07-09T17:23:13Z

0 votes

我使用ZF2并在替换时为我工作&#39; PHPUnit_Framework_TestCase&#39; 到&#39; \ PHPUnit \ Framework \ TestCase&#39;

Alysson Vicuña de Oliveira answered 2019-07-09T17:23:43Z

0 votes

注意:命令php bin/console generate:doctrine:crud也在src/Tests中创建TestController,因此当您尝试启动服务器时,如果您没有UnitTests,它可能会抛出错误。删除文件修复它!

MorganFreeFarm answered 2019-07-09T17:24:11Z

0 votes

对我来说,那是因为我跑了

$ phpunit .

代替

$ phpunit

当我在工作目录中已经配置了phpunit.xml文件时。

cyberbit answered 2019-07-09T17:24:50Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值