致命错误: 找不到类'PHPUnit_Framework_TestCase'

5

我正在使用XAMPP 1.8.1,Windows 7 64位操作系统和Netbeans IDE 7.4。我已经安装了PHPUnit。

当我运行代码时,出现以下错误:

致命错误:在D:\xampp\htdocs\PHPUnit\index.php的第6行找不到类'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,有没有人能建议我如何解决这个问题?提前感谢。

6个回答

8

对于新版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 {

}

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


4

你没有提到你使用的PHP版本,但如果是3.5或更高版本,只需添加以下内容:

require_once 'PHPUnit/Autoload.php';

在你的代码顶部引入所需文件。

如果没有,请使用:

require_once 'PHPUnit/Framework/TestCase.php';

不太可能您在使用早于3.5版本的软件,但我还是加上了这段话以防万一。


3
你是在尝试在网页浏览器中运行测试吗?这让我困惑了一段时间。PHPUnit 测试是为在命令行上运行而编写的。

2

我认为你只需要获取最新版本的PHPUnit,并不包括下面提到的任何文件。当我升级到最新版本,但仍在运行旧的单元测试时,这个方法对我起作用:

require_once 'PHPUnit/Framework/TestCase.php';

删除这行代码解决了问题。

1

如果您在更新phpunit到6版本后到达此处,您需要将类重命名为:\PHPUnit_Framework_TestCase 改为 \PHPUnit\Framework\TestCase


0

这个问题有两个层面的答案。

首先,对于一些人来说,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等类似建议中包含的文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接