【问题标题】:Fatal error running unit test in Yii app在 Yii 应用程序中运行单元测试时出现致命错误
【发布时间】:2013-01-28 03:03:26
【问题描述】:

这个问题是我的本地情况,尚未解决(尚未)。但是,如果您遇到此问题,故障排除步骤可能会为您提供一个很好的开始途径。


我想在 localhost 上的 Yii Web 应用程序中运行单元测试,该应用程序通过 Windows 7 上的 WampServer 2.1 运行。

<?php
class LittleTest extends CTestCase
{
    public function testApprove()
    {
        $value1 = "1";
        $this->assertEquals($value1,$value1);
    }
}
?>

我在尝试运行测试时收到一个致命错误。这是我在 Windows 命令行上运行它的方式:

C:\wamp\www\app\protected\tests>
C:\wamp\www\app\protected\tests>cd unit
C:\wamp\www\app\protected\tests\unit>phpunit LittleTest.php

我收到(连同一些堆栈跟踪行):

PHP Fatal error:  
class 'CTestCase' not found in [path to file]\LittleTest.php on line 4

到此为止的故障排除步骤:

应用程序运行。应用的默认索引页面看起来不错,我已经使用gii工具创建了一个模型类。

从命令行,我可以看到 phpphpunit 可用(我已经检查了我的 pear 安装以确保一切正常):

C:\wamp\www\app\protected\tests>
C:\wamp\www\app\protected\tests>phpunit --version
PHPUnit 3.7.13 by Sebastian Bergmann.

C:\wamp\www\app\protected\tests>
C:\wamp\www\app\protected\tests>php --version
PHP 5.3.5 (cli) 
... etc

display_errors 已打开。 display_startup_errors 已开启。

我尝试重命名类,使名称与文档名称不匹配:

class LittleTestTweak extends CTestCase 

我不确定运行测试的确切命令,所以我尝试了以下变体:

php LittleTest.php

我还尝试在文件夹结构的不同位置运行它。这是直接结构:

/tests
    |   bootstrap.php
    |   my_tree.txt
    |   phpunit.xml
    |   WebTestCase.php
    |   
    |---- /fixtures
    |---- /functional
    |         SiteTest.php
    |       
    |---- /report
    `---- /unit
              LittleTest.php

我还检查了我的php.ini 以获得 PEAR 的路径;据我所知,这是正确的(但我该如何测试呢?):

include_path=".;C:\wamp\bin\php\php5.3.5\PEAR;C:\wamp\www\app

更多信息

对此的回应:

cd wamp\www\app\protected\tests
phpunit unit\LittleTest.php

我收到这个:

Warning: require_once(PHPUnit/Extensions/SeleniumTestCase.php): 
            failed to open stream: No such file or directory in 
            C:\wamp\www\yii\framework\test\CWebTestCase.php on line 12

Call Stack:
        0.0007     339624   1. {main}() C:\wamp\bin\php\php5.3.5\phpunit:0
        0.0164     698440   2. PHPUnit_TextUI_Command::main() 
               C:\wamp\bin\php\php5.3.5\phpunit:46
        0.0164     698856   3. PHPUnit_TextUI_Command->run() 
               C:\wamp\bin\php\php5.3.5\PEAR\PHPUnit\TextUI\Command.php:129
        0.0164     698856   4. PHPUnit_TextUI_Command->handleArguments() 
               C:\wamp\bin\php\php5.3.5\PEAR\PHPUnit\TextUI\Command.php:138
        0.0289    1220944   5. PHPUnit_TextUI_Command->handleBootstrap() 
               C:\wamp\bin\php\php5.3.5\PEAR\PHPUnit\TextUI\Command.php:606
        0.0300    1233328   6. PHPUnit_Util_Fileloader::checkAndLoad() 
               C:\wamp\bin\php\php5.3.5\PEAR\PHPUnit\TextUI\Command.php:778
        0.0330    1233424   7. PHPUnit_Util_Fileloader::load() 
               C:\wamp\bin\php\php5.3.5\PEAR\PHPUnit\Util\Fileloader.php:76
        0.0334    1238096   8. include_once
               ('C:\wamp\www\app\protected\tests\bootstrap.php') 
               C:\wamp\bin\php\php5.3.5\PEAR\PHPUnit\Util\Fileloader.php:92
        0.0412    1520256   9. require_once
               ('C:\wamp\www\app\protected\tests\WebTestCase.php') 
               C:\wamp\www\app\protected\tests\bootstrap.php:8
        0.0413    1520520  10. YiiBase::autoload() 
               C:\wamp\www\yii\framework\YiiBase.php:0
        0.0423    1543904  11. 
               include('C:\wamp\www\yii\framework\test\CWebTestCase.php') 
               C:\wamp\www\yii\framework\YiiBase.php:395

Fatal error: require_once(): Failed opening required     
        'PHPUnit/Extensions/SeleniumTestCase.php' 
        (include_path='.;C:\wamp\bin\php\php5.3.5\PEAR\pear;C:\wamp\bin\php\php5.3.5\pear') 
        in C:\wamp\www\yii\framework\test\CWebTestCase.php on line 12

Call Stack:
    0.0007     339624   1. {main}() C:\wamp\bin\php\php5.3.5\phpunit:0
    0.0164     698440   2. PHPUnit_TextUI_Command::main()  
            ...et cetera...

失败的要求是PHPUnit/Extensions/SeleniumTestCase.php。不知道是不是PHPUnit是本地安装在C:\wamp下的问题。

我打开了我的php.ini 并添加到include_pathC:\wamp\bin\php\php5.3.5\PEAR\PHPUnit\Extensions。重新启动wamp。错误报告没有变化。

分辨率

我的安全设置使用了 DansGuardian,但我忽略了放宽禁止扩展类型的设置,这会阻止文件下载。事实上,我不在乎禁止任何类型,修改该文件可以让一切正常工作。 糟糕,这是我的 Linux 设置。 PHPUnit 在那里工作,它也在 WAMP 上工作。在 WAMP 上重新创建步骤是不可能的;但我知道我必须open cmd.exe as administratorpear update-channelspear upgrade-all 等。我还必须在某一时刻clear pear's cache,我必须overcome an issue with curl 识别才能安装Selenium:

pear install --force phpunit/PHPUnit_Selenium

【问题讨论】:

  • 你能粘贴准确的错误信息吗?
  • 不幸的是,这个 windows 命令窗口不允许我复制到剪贴板。但是等一下,我会努力的。 .. 好的,完成
  • protected\tests 目录中尝试:phpunit unit/LittleTest.php
  • 我尝试并收到很多错误报告,表明我的配置错误。不幸的是,我现在必须离开这个项目几个小时,但我会尽快回来。
  • 好的,将新错误添加到问题中

标签: yii phpunit wamp


【解决方案1】:

要使用 phpunit 在 Yii 中运行单元测试,您需要让 phpunit 加载 protected/tests/bootstrap.php 文件,该文件基本上设置了配置,并自动加载所需的类(主要是与测试有关)。 bootstrap.php 文件会加载 yiit.php,它实际上会自动加载所需的类。

现在我们可以在运行 phpunit 时通过命令行选项加载所有这些配置,或者让配置通过 protected/tests/phpunit.xml 文件自动读取。

对于后一种方法,调用phpunit的目录应该有phpunit.xml文件,在Yii默认webapp中,这个目录是protected/tests。因此,您需要执行以下操作来运行测试:

cd wamp\www\app\protected\tests
phpunit unit\LittleTest.php

【讨论】:

  • 是的,感谢下面链接的帖子,我知道需要 XML 配置文件。但是,没有成功 - 用我的 OP 看到残酷的大粘贴。 stackoverflow.com/q/12760644/122139
  • 好吧,看来您的 phpunit 安装有点混乱。我没有 Windows 系统,我可以在其中进行测试并给你可靠的建议,对不起,但一些谷歌搜索发现了许多类似的问题。他们中的大多数人建议使用 pear 重新安装 phpunit,检查yii-forum link
  • 我的 pear 安装确实搞砸了,请参阅 OP 的最底部新增功能。再次感谢。
  • 不够好,这更像是一种解决方法,而不是解决问题的根本原因
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2013-05-29
  • 2017-07-21
  • 2013-01-01
  • 1970-01-01
相关资源
最近更新 更多