![](/img/trans.png)
[英]PHP Fatal error: Class 'PHPUnit_Framework_TestCase' not found
[英]Why, Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...?
为什么我会收到这个 PHP 错误?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
对于那些在将 phpunit 更新到 2017 年 2月 3 日发布的版本 6 或更高版本(例如使用 composer)之后到达这里的人,您可能会收到此错误,因为 phpunit 代码现在已命名空间(检查更改日志)。
您需要将\\PHPUnit_Framework_TestCase
重构为\\PHPUnit\\Framework\\TestCase
PHPUnit 文档说过去常说要包含/需要 PHPUnit/Framework.php,如下:
require_once ('PHPUnit/Framework/TestCase.php');
更新
从 PHPUnit 3.5 开始,有一个内置的自动加载器类可以为您处理这个问题:
require_once 'PHPUnit/Autoload.php';
感谢凤凰指出这一点!
对于更高版本的 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 {
}
我在 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 中包含任何内容。 例如,在浏览器中运行测试。
我使用 ZF2 并在将 'PHPUnit_Framework_TestCase' 替换为 '\\PHPUnit\\Framework\\TestCase' 时为我工作
如果你有 Centos 或其他 Linux 发行版,你必须安装 phpunit 包,我用 yum install phpunit 做到了这一点,它工作正常。 也许您必须添加一个存储库,但我认为它必须与默认存储库配合使用(我有 CentOS 7)
很可能您正在运行 WordPress 核心测试,并且最近将您的 PhpUnit 升级到第 6 版。如果是这种情况,那么最近对 PhpUnit 中命名空间的更改将破坏您的代码。
幸运的是, 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 点可以看出,包含目录之前有五个斜杠, -p5 标志将为您删除。
$ cd [WORDPRESS DIRECTORY] $ patch -p5 < changeset_40547.diff
完成此操作后,我的测试再次正确运行。
注意:命令php bin/console generate:doctrine:crud
也会在src/Tests
创建TestController
,因此如果您没有UnitTests
,它可能会在您尝试启动服务器时抛出错误。 删除文件修复它!
对我来说,那是因为我跑了
$ phpunit .
代替
$ phpunit
当我已经在工作目录中有一个配置phpunit.xml
文件时。
我在窗口 10 上使用 php 5.6,我添加了 zend 1.12 版本
require_once 'PHPUnit/Autoload.php';
前
抽象类 Zend_Test_PHPUnit_ControllerTestCase 扩展 PHPUnit_Framework_TestCase
工作。 我们需要在 ControllerTestCase.php 文件中添加上面的语句
我得到了它
include("vendor/autoload.php");
在我的测试功能的顶部。
ping
功能 function ping($host){ $start=microtime(true); $fp=@fsockopen($host, 80, $errno, $errstr, 10); return (!$fp?'(Unknown)': round((microtime(true)-$start)*1000)); }
用法:
ping('google.com');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.