Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么,致命错误:Class';PHPUnit框架测试用例&x27;在…中找不到。。。?_Php_Fatal Error_Classnotfoundexception - Fatal编程技术网

为什么,致命错误:Class';PHPUnit框架测试用例&x27;在…中找不到。。。?

为什么,致命错误:Class';PHPUnit框架测试用例&x27;在…中找不到。。。?,php,fatal-error,classnotfoundexception,Php,Fatal Error,Classnotfoundexception,为什么我会遇到这个PHP错误 Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ... says用于表示包含/需要PHPUnit/Framework.php,如下所示: require_once ('PHPUnit/Framework/TestCase.php'); 更新 从PHPUnit 3.5开始,有一个内置的autoloader类将为您处理此问题: require_once 'PHPUnit/Autoload.ph

为什么我会遇到这个PHP错误

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
says用于表示包含/需要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即可运行命令():

运行单个测试

然后运行PHPunit测试:

phpunit test.php
测试文件的内容如下:

<?php

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

    public function testSave()
    {

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

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完成了这项工作,而且效果良好。可能您需要添加一个存储库,但我认为它必须与默认的存储库(我有CentOS 7)配合使用。

对于那些在2017-02-03发布phpunit至版本6或更高版本后到达这里的人(例如,使用composer),您可能会遇到此错误,因为phpunit代码现在已命名(检查)


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

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

幸运的是,核心测试有一个补丁可以解决这个问题。它还包括对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 
    
    $cd[WORDPRESS目录]
    $patch-p5<变更集_40547.diff
    

  • 完成此操作后,我的测试再次正确运行。

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

    在composer.json中:

    "phpunit/phpunit": "~4.8|~5.7"
    
    在我的PHPUnit引导文件中(在我的例子中,
    /tests/bootstrap.php
    ):


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

    适用于PHPUnit的更高版本,如6.4 您必须使用名称空间PHPUnit\Framework\TestCase

    // use the following namespace
    use PHPUnit\Framework\TestCase;
    
    // extend using TestCase instead PHPUnit_Framework_TestCase
    class SampleTest extends TestCase {
    
    }
    
    使用TestCase代替PHPUnit\u框架\u TestCase

    // use the following namespace
    use PHPUnit\Framework\TestCase;
    
    // extend using TestCase instead PHPUnit_Framework_TestCase
    class SampleTest extends TestCase {
    
    }
    

    我使用ZF2,并在将“PHPUnit\u Framework\u TestCase”替换为“\PHPUnit\Framework\TestCase”时为我工作。注意:
    命令
    php-bin/console-generate:document:crud
    也在
    src/Tests
    中创建
    TestController
    ,以便在您尝试启动服务器时,如果您没有
    单元测试
    。删除文件并修复它

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

    $ phpunit .
    
    而不是

    $ phpunit
    

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

    我正在windows10上使用php5.6,zend 1.12版本供我添加

    需要一次“PHPUnit/Autoload.php”

    以前

    抽象类Zend_Test_PHPUnit_ControllerTestCase扩展 PHPUnit_框架_测试用例

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

    include("vendor/autoload.php");
    

    在我的测试函数顶部。

    您根本没有提供任何信息。请通过phpunit命令行运行测试。它加载了必要的类。您还可以使用下面答案中的答案来保持代码与PHPUnit 6以及早期版本兼容。PHPUnit 3.5自带了自己的自动加载器,这可能有助于简化操作:
    require_once'PHPUnit/Autoload.php'
    I concure that require_once('PHPUnit/Autoload.php')是最佳实践。我没有
    PHPUnit/Autoload.php
    PHPUnit/Framework/TestCase.php
    ,我的文件夹有点像
    PHPUnit/Framework/MockObject
    ,现在我有了
    php致命错误:require_once():无法打开所需的“PHPUnit/Autoload.php”
    请参阅@shadi对PHP6+的回答,如果您这样做:
    classyournicetest扩展了PHPUnit\u Framework\u TestCase
    只需在扩展类前面添加\即可,就像在
    classyournicetest扩展了PHPUnit\u Framework\u TestCase
    中一样-这对我很有效,使用
    Symfony 2.8
    并将
    phpunit
    作为本地依赖项与
    “phpunit/phpunit”下载到composer文件中:“^4.8”
    谢谢,我遇到了这个问题,因为Travis CI在其PHP7版本上使用了最新的phpunit版本。我的解决办法是手动下载一个旧的phar并使用它。它在发行说明的顶部,但我错过了它谢谢你,好的
    $ phpunit
    
    include("vendor/autoload.php");