为什么,致命错误: 类‘ PHPUnit_Framework_TestCase’没有在... ?

为什么我得到这个 PHP 错误?

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
156132 次浏览

PHPUnit 文档 过去常说包括/需要 PHPUnit/Framework.php,如下所示:

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

更新

从 PHPUnit 3.5开始,有一个内置的 autoloader 类可以为您处理这个问题:

require_once 'PHPUnit/Autoload.php';

感谢菲尼克斯指出这一点!

假设:

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

行动:

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

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

评论:

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

您可以简单地安装 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 前面加上一个反斜杠来指定它在全局命名空间中:

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

我提交了 粗鲁的公关开始谈话纠正 文件

如果你有 Centos 或者其他 Linux 发行版,你必须安装 phPunit 软件包,我用 yum install phPunit 做了这个,它起作用了。也许您可以添加一个存储库,但我认为它必须与默认存储库顺利工作(我有 CentOS7)

对于那些在2017-02-03发布的 版本6或以上中更新 phPunit 之后到达这里的人(例如使用作曲家) ,你可能会得到这个错误,因为 phPunit 代码现在是名称空间的(检查 更改日志)。

您将需要重构像 \PHPUnit_Framework_TestCase\PHPUnit\Framework\TestCase这样的东西

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

幸运的是,https://core.trac.wordpress.org/changeset/40547的核心测试有一个补丁,可以解决这个问题。它还包括对 Travis. yml 的更改,您的设置中可能没有这些更改; 如果是这样的话,那么您需要编辑。Diff 文件来忽略特拉维斯补丁。

  1. https://core.trac.wordpress.org/changeset/40547的底部下载“ Unified Diff”补丁
  2. 编辑补丁文件,删除特拉维斯部分的补丁,如果你不需要。从文件顶部删除到这一行之上:

    Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
    
  3. Save the diff in the directory above your /includes/ directory - in my case this was the Wordpress directory itself

  4. Use the Unix patch tool to patch the files. You'll also need to strip the first few slashes to move from an absolute to a relative directory structure. As you can see from point 3 above, there are five slashes before the include directory, which a -p5 flag will get rid of for you.

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

After I did this my tests ran correctly again.

我在 PHP5上运行 PHPUnit 测试,然后,我还需要支持 PHP7。我就是这么做的:

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');

换句话说,这将适用于最初为 PHPUnit4或5编写的测试,但随后也需要在 PHPUnit6上工作。

对于 phPunit 的 更高的版本,如 < strong > 6.4 必须使用名称空间 < strong > 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 {


}

我使用 ZF2并且在将‘ PHPUnit _ Framework _ TestCase’替换为‘ PHPUnit Framework TestCase’时为我工作

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

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

$ phpunit .

而不是

$ phpunit

当我已经在工作目录中配置了一个 ABc0文件时。

我在 window10上使用了 php 5.6,并添加了 zend 1.12版本

Request _ once‘ PHPUnit/Autoload.php’;

之前

抽象类 Zend _ Test _ PHPUnit _ ControllerTestCase 扩展 PHPUnit _ Framework _ TestCase

我们需要在 ControllerTestCase.php 文件中添加上述语句

我得到了它的工作与

include("vendor/autoload.php");

在我的测试函数的顶部。