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

Alv*_*vin 118 php fatal-error classnotfoundexception

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

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Run Code Online (Sandbox Code Playgroud)

sha*_*adi 218

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

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

  • 谢谢,我有这个问题,因为Travis CI在他们的PHP 7版本中使用了最新的PHPUnit版本.我的修复是手动下载旧的phar并使用它. (4认同)
  • https://github.com/sebastianbergmann/phpunit/wiki/Release-Announcement-for-PHPUnit-6.0.0它位于发行说明的顶部,但我错过了它 (2认同)

def*_*nes 70

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

require_once ('PHPUnit/Framework/TestCase.php');
Run Code Online (Sandbox Code Playgroud)

UPDATE

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

require_once 'PHPUnit/Autoload.php';
Run Code Online (Sandbox Code Playgroud)

感谢凤凰城指出这一点!

  • PHPUnit 3.5带有自己的自动加载器,可能有助于简化:`require_once'PHPUnit/Autoload.php'` (14认同)
  • 现在我有`PHP致命错误:require_once():无法打开所需的'PHPUnit/Autoload.php' (3认同)
  • 它在哪里说呢? (2认同)
  • 请参阅@shadi 对 PHP 6+ 的回答 http://stackoverflow.com/a/42561590/2883328 (2认同)

Jij*_*rai 34

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

}
Run Code Online (Sandbox Code Playgroud)


小智 13

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

namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}
Run Code Online (Sandbox Code Playgroud)

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


Nin*_*pac 10

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

在composer.json中:

"phpunit/phpunit": "~4.8|~5.7"
Run Code Online (Sandbox Code Playgroud)

在我的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');
Run Code Online (Sandbox Code Playgroud)

换句话说,这适用于最初为PHPUnit 4或5编写的测试,但之后也需要在PHPUnit 6上工作.


rad*_*los 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
Run Code Online (Sandbox Code Playgroud)

运行单一测试

然后运行PHPunit测试:

phpunit test.php
Run Code Online (Sandbox Code Playgroud)

测试文件的内容如下:

<?php

class StackTest extends PHPUnit_Framework_TestCase
{
    protected function setUp()
    {
    }

    public function testSave()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

运行测试套件

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

<testsuites>
    <testsuite name="DemoTestSuite">
        <directory suffix="test.php">demo</directory>
    </testsuite>
</testsuites>
Run Code Online (Sandbox Code Playgroud)

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

phpunit -c demosuite.xml --testsuite DemoTestSuite
Run Code Online (Sandbox Code Playgroud)

  • 这不再有效,因为最终PHPUnit不再支持旧的类名,例如`PHPUnit_Framework_TestCase`.你真的必须使用`... extends PHPUnit\Framework\TestCase` (2认同)