【问题标题】:Fatal error: Class 'PHPUnit_Framework_TestCase' not found致命错误:找不到类“PHPUnit_Framework_TestCase”
【发布时间】:2014-03-13 11:45:55
【问题描述】:

我正在使用 XAMPP 1.8.1、Windows 7 64 位、Netbeans IDE 7.4 我已经安装了 PHPUnit。 当我运行代码时,出现以下错误。

致命错误:在第 6 行的 D:\xampp\htdocs\PHPUnit\index.php 中找不到类“PHPUnit_Framework_TestCase”

代码是:

<?php

class StackTest extends PHPUnit_Framework_TestCase {

    public function testPushAndpop() {
        $stack = array();
        $this->assertEquals(0, count($stack));

        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack) - 1]);
        $this->assertEquals(1, count($stack));

        $this->assertEquals('foo', array_pop($stack));
        $this->assertEquals(0, count($stack));
    }

}

?>

我在环境变量PATH中添加了D:\xampp\php 有人建议我如何解决这个问题吗? 提前致谢。

【问题讨论】:

    标签: php phpunit pear


    【解决方案1】:

    你没有提到你使用的是哪个版本的PHP,但是如果是3.5或更高的,只需添加

    require_once 'PHPUnit/Autoload.php';
    

    到代码的顶部拉入所需的文件。

    如果没有,请使用:

    require_once 'PHPUnit/Framework/TestCase.php';
    

    您不太可能使用早于 3.5 的版本,但我已将其包含在内以防万一。

    【讨论】:

      【解决方案2】:

      您是否尝试在网络浏览器中运行测试?这让我困惑了一段时间。 PHPUnit 测试被编写为在命令行上运行。

      【讨论】:

        【解决方案3】:

        我认为您只需要获取最新版本的 PHPUnit 并且不包含任何文件,如下所述。当我升级到最新版本但运行旧的单元测试时,这对我有用:

        require_once 'PHPUnit/Framework/TestCase.php';
        

        删除此行解决了问题。

        【讨论】:

          【解决方案4】:

          对于那些在将 phpunit 更新到版本 6 后到达这里的人。 您将需要重命名该类,如: \PHPUnit_Framework_TestCase\PHPUnit\Framework\TestCase

          【讨论】:

            【解决方案5】:

            对于新的 PHPUnit 版本,您只需在使用 use PHPUnit\Framework\TestCase; 的帮助下扩展 TestCase 而不是 PHPUnit_Framework_TestCase

            古老而废弃的方式:

            // No namespace in this old method
            
            class ClassATest extends PHPUnit_Framework_TestCase {
            
            }
            

            6.x 等版本采用的新方式:

            // Namespace used in this new method
            
            use PHPunit\Framework\TestCase;
            
            class ClassATest extends TestCase {
            
            }
            

            如果您不使用这种新方法,您将遇到困难。采用它,这将解决您的问题。

            【讨论】:

              【解决方案6】:

              对此有两个层次的答案。

              对于某些人来说,第一个问题是,虽然 PHP 中的类名不区分大小写,但自动加载器有时不区分大小写,因此您需要使用正确的父类名称: PHPUnit_Framework_TestCase

              第二个问题是PHPUnit 6 与自身不兼容。如果您和其他许多人一样,需要能够编写适用于任一版本的测试用例,请创建一个包含以下内容的新包含文件:

              <?php
              
              if (!class_exists('PHPUnit_Framework_TestCase') &&
                class_exists('\\PHPUnit\\Framework\\TestCase')) {
                  abstract class PHPUnit_Framework_TestCase extends \PHPUnit\Framework\TestCase {
                  }
              }
              

              然后,将此文件包含在每个测试用例的顶部。测试用例本身继续从上述类继承,例如,在我的代码中:

              class Minijson_Tests extends PHPUnit_Framework_TestCase {
              

              与之前的建议相反,包括 PHPUnit/Autoload.phpPHPUnit/Framework/TestCase.php 已被证明对于 PHPUnit 4.2.6 (Debian jessie) 和 6.5.5 (Debian sid) 都是不必要的。也没有必要写一个phpunit.xmlbootstrap.php等类似的建议。

              【讨论】:

                猜你喜欢
                • 2019-09-22
                • 1970-01-01
                • 1970-01-01
                • 2011-08-29
                • 2018-10-14
                • 2014-06-11
                • 1970-01-01
                • 2017-08-06
                • 2014-10-03
                相关资源
                最近更新 更多