PHPUnit错误 - 找不到类

7
我刚刚将PHPUnit从3.4升级到3.5并安装在我的系统上,但是新版本出现了一些问题。当我尝试运行测试时,总是得到相同的输出结果。以下是我在命令行上运行PHPUnit手册中的StackTest示例(示例4.1)时得到的输出结果:
> phpunit StackTest

X-Powered-By: PHP/5.2.17
Content-type: text/html

PHPUnit 3.5.13 by Sebastian Bergmann.

Class StackTest could not be found in StackTest.php.

更糟糕的是,当我尝试从Web浏览器中运行它时,我会得到以下输出:
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in /path/to/tests/StackTest.php on line 2 

有人知道怎么设置吗?谢谢。

9个回答

6
我曾在Windows上遇到你描述的问题。 该问题源于文件pear\PHPUnit\Runner\StandardTestSuiteLoader.php第131行,由于条件中文件名驱动器字母大小写不同所导致。
if ($class->getFileName() == realpath($suiteClassFile)) {

我的简单解决方案是将此行更改为不区分大小写

if (strtolower($class->getFileName()) == strtolower(realpath($suiteClassFile))) {

4
phpunit MyTestClass

在我的情况下

  • MyTestClass.php应该在项目主目录中
  • 它应该以长的php开标签开始(<?php, 而不是 <?)
  • 它应该包含class MyTestClass extends PHPUnit_Framework_TestCase {

我知道这可能不是最好的方法,但这是给初学者指引的起点。


3

我认为你的 PHPUnit 类名为 StackTest,而你想要测试的类也叫做 StackTest。这将导致 PHPUnit 中的路径冲突。

把这两个名称改成不同的,问题就会得到解决。


3

尝试

pear upgrade pear

(如果它要求您进行频道升级,请执行此操作)
然后,
pear install --force --alldeps phpunit/phpunit

请再试一次。

3.5升级与有缺陷的pear安装程序(1.9.1存在一种相当烦人的错误,因此请确保您真正使用的是1.9.2版本)有时可能会很麻烦。


2
自PHPUnit 9开始,测试文件名必须与类名匹配。

#4105: 弃用单个文件中的多个测试用例类和文件名与测试用例类名不同

因此,如果测试文件名为test-plugin.php,而类名为PluginTest,则会出现错误。要解决此问题,您需要将文件重命名为PluginTest.php
我认为这是一个糟糕的错误信息。

2

当您忘记将测试类扩展PHPUnit TestCase类时,也会导致此错误,例如:

class MyTestClass extends \PHPUnit\Framework\TestCase { ...

2
在我的情况下,这个问题是由于通过 require_once 在源文件中包含 PHPUnit 导致的:
require_once 'phar://phpunit.phar';

删除那行代码使得我的测试用例可以运行。


1
我已经解决了这个问题。问题出在我加载类的方式上。我像这样使用参数数组中的参数,然后它就起作用了。但是在此之前,我还需要解决类路径等许多其他问题。要查看一个可行的解决方案,请参见这里(http://www.siteconsortium.com/h/p1.php?id=php002)。
$command = new PHPUnit_TextUI_Command();
$command->run(array('test', 'testCase', 'c:\workspace\project\testCase.php'), true);

0

看起来 PHPUnit 不在您的包含路径中。为了轻松测试这一点,请尝试以下操作:

$ phpunit --include-path /path/to/PHPUnit StackTest 

很遗憾,那没有奏效。我尝试将“/path/to/PHPUnit”替换为phpunit应用程序的路径和PHPUnit支持文件的路径(PEAR将它们放在不同的目录中)。但是没有成功。 - jay

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