如何解决这个错误:“找不到类PHPUnit_Extensions_SeleniumTestCase”?

12

我正在尝试使用phpunit运行SeleniumTestCase,但是我无法通过phpunit.bat脚本运行它。

我的目标是在CruiseControl和phpUnderControl中使用phpunit与Selenium RC一起使用。以下是测试案例的代码:

require_once 'PHPUnit/Extensions/SeleniumTestCase.php';

class WebTest extends PHPUnit_Extensions_SeleniumTestCase
{
    protected function setUp()
    {
        $this->setBrowser('*firefox');
        $this->setBrowserUrl('http://www.example.com/');
    }

    public function testTitle()
    {
        $this->open('http://www.example.com/');
        $this->assertTitleEquals('Example Web Page');
    }
}

我在include_path中也安装了PEAR和带有Selenium扩展的PHPUnit。我使用pear installer进行安装,所以我想那不是问题所在。

任何帮助将不胜感激。

谢谢,Remy


不知道为什么在/PEAR/PHPUnit/Extensions/SeleniumTestCase.php中找不到PHPUnit_Extensions_SeleniumTestCase,难道它不应该在那里吗? - farinspace
10个回答

16

希望这个回答比之前提供的那些(没有解决我的问题)更具确定性。如果你遇到这个错误,请检查你的PEAR文件夹,看看 "SeleniumTestCase.php" 文件是否存在:

/PEAR/PHPUnit/Extensions/SeleniumTestCase.php

如果不是这个问题,最简单的方法就是使用 PEAR 卸载并重新安装 PHPUnit ...

pear uninstall phpunit/PHPUnit

pear uninstall phpunit/PHPUnit_Selenium

pear install phpunit/PHPUnit

在执行上述操作并仅进行单个安装后,PHPUnit_Selenium也被自动安装了。我不确定这是否是典型情况,因此有些人可能需要做...

pear install phpunit/PHPUnit_Selenium

如果需要PEAR渠道信息,请参见http://www.phpunit.de/manual/3.5/en/installation.html


这就是我需要做的来修复它,感谢 farinspace。 - Toby
卸载了PHPUnit,但现在它说没有可用的版本...太好了。 - Neil McGuigan
使用 pear install phpunit/PHPUnit 执行时出现错误:无效的软件包名称/软件包文件phpunit/PHPUnit - aksyuma
虽然我已经有一段时间没有使用PHPUnit了,但我认为未来最好的方法是使用PHAR包,请参见https://github.com/sebastianbergmann/phpunit。 - farinspace

6

下面是解决方法:

如果你遇到 "在(测试用例文件名)中找不到类PHPUnit_Extensions_SeleniumTestCase" 的问题,你需要做以下两件事情:

1. 将测试用例的文件名改为它所包含的类名 2. 你应该从包含你的测试的文件夹中启动phpunit。

这样就可以解决你的问题了。

Andrew


1
我发现 PHPUnit 教程中的以下示例可以正常工作,而我编写的测试出现了相同的错误。 解决方案让我感到惊讶。请确保您的类位于 <?php .. ?> 块中,而不是脚本中的 <? .. ?> 块。
<?php
require_once 'PHPUnit/Framework.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));
    }
}
?>

2
此外,尝试在命令行上使用PHPUnit的--syntax-check标志。 否则,PHPUnit可能会默默忽略程序中的错误。 - CruiZen

1

不要假定pear安装没有问题。

我通过pear安装了phpunit,但尽管它说安装很好,当我查看文件夹时,我有所有这些以.tmp开头的文件,例如PHPUnit/Util/.tmpErrorHandler.php,因此自然地,当我第一次运行测试时,它给了我与上面相同的错误。在检查确实不存在该文件后,我手动将PHPUnit安装到与pear相同的文件夹中,结果一切都很好。我使用的是Mac/leopard。

关于Selenim RC,请不要忘记通过终端运行以下命令来启动它 java -jar /path/to/file/selenium-server.jar


1

看一下 PHP 手册中 require_once 条目中的一个评论。

http://ie.php.net/manual/en/function.require-once.php#62838

"require_once(以及include_once)速度较慢。

此外,如果您计划使用单元测试和模拟对象(即在要测试的类中包含模拟类之前),它将无法正常工作,因为require()加载的是文件而不是类。"


1

我刚刚将包含测试类的文件重命名为“WebTest.php”,现在测试可以正常运行了。


1

这是我解决这个问题的方法:

  1. 确保已安装 PHP 的 curl 扩展,例如在 Ubuntu 上执行 sudo apt-get install php5-curl
  2. 输入 sudo pear install phpunit/PHPUnit_Selenium

之后您应该已经安装了缺失的文件

祝编码愉快...


1

尝试:

class WebTest extends \PHPUnit_Extensions_Selenium2TestCase

这可能是命名空间问题,就像对我一样。


0

当它失败时,它并不总是打印出最详细的错误信息。

始终记得在运行测试之前先启动Selenium。

java -jar selenium-server-standalone-2.39.0.jar

这是一个对我自己有效的代码示例。 http://www.siteconsortium.com/h/p1.php?id=php002。显然有很多不同的编写测试套件和启动测试用例的方式,但我首先使用set_class_path来摆脱类问题。


0

当我使用内联命令时:如果从PhPunit目录启动测试,则会出现错误,而从测试目录启动时则没有错误...

但我仍然无法访问Selenium服务器...我需要在之前启动它吗?

如果是的话,那么我们不必指定任何PhPUnit句柄就很奇怪了...


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