0

我已经为我的配置苦苦挣扎了 2 天。

当我从我的 bash 模拟器启动 phpunit 时(在 Windows 7 下工作)

bin/phpunit -c 应用程序

我收到以下错误:

从 C:\wamp\www\myproject\app\phpunit.xml.dist 读取的配置

..PHP 致命错误:第 39 行的 C:\wamp\www\myproject\src\myproject\Business\Tests\eUserManagerTest.php 中找不到类 'myproject\Business\Tests\Entity\PHPUnit_Extensions_Databas e_DataSet_YamlDataSet'


我的环境试图用 myproject\Business\Tests\Entity为PHPUnit_Extensions_Database_DataSet_YamlDataSet的路径添加后缀,而 require_once 语句指定这是在PHPUnit/Extensions/Database/DataSet/YamlDataSet.php中定义的。

下面的“新”语句导致了这个错误的完成尝试:


    namespace myproject\Business\Tests\Entity;

    require_once "PHPUnit/Autoload.php";
    require_once "PHPUnit/Extensions/Database/Autoload.php";
    require_once "PHPUnit/Extensions/Database/DataSet/YamlDataSet.php';

    use \PDO;
    use myproject\Business\Entity\eUserManager;

    class eUserManagerTest extends \PHPUnit_Extensions_Database_TestCase
    {    
       ...

        /**
         * @return PHPUnit_Extensions_Database_DataSet_IDataSet
         */
        protected function getDataSet()
        {
            return new PHPUnit_Extensions_Database_DataSet_YamlDataSet(
                    dirname(__FILE__)."/eusertable.yml"
                    );
        }


我的问题是弄清楚为什么 *!ù% 它没有在正确的路径中查找(如 require_once 中所定义)。

也许是线索:我在文件树中发现了两个不同的 phpunit exe 文件:

/c/wamp/www/myproject/bin/phpunit

/c/wamp/bin/php/php5.4.3/phpunit

我认为第一个是在我安装 phpunit 时创建的,方法是在 composer.json 文件中声明它 + 启动:

作曲家更新

这适用于通过启动不涉及数据库的单元测试:

bin/phpunit -c 应用程序

第二个已通过 pear 安装,如 phpunit 文档中所述:http: //phpunit.de/manual/3.8/en/database.html

用于数据库处理的类定义位于第二个位置:
/c/wamp/bin/php/php5.4.3/phpunit/pear/PHPUnit/Extensions/Database

这就是我希望 php 研究实例化我的类的地方。

所以我的提示是问题可能与这个双重 phpunit 安装有关(一个在 symfony 本身,另一个在 php5.4.3 目录中)。

我过得好吗?
我的安装过程有错误吗?
Symfony 如何通过 pear 了解此数据库扩展安装?

注意:启动:

/c/wamp/bin/php/php5.4.3/phpunit -c 应用程序

来自 /c/wamp/www/myproject 给出了这个错误:sh.exe": /c/wamp/bin/php/php5.4.3/phpunit: .\php.exe: bad interpreter: No such file or directory

谢谢你的帮助

4

1 回答 1

0

我自己偶然找到了解决方案,却不了解自己在做什么。实际上 PHPUnit 类是在 PHP 的全局空间中声明的,而不是在特定的命名空间中声明的。要指定这一点,需要在类名之前添加一个“\”,以便 PHP 将查看这个全局空间。

所以解决方案是写:

    return new \PHPUnit_Extensions_Database_DataSet_YamlDataSet(
                    dirname(FILE)."/eusertable.yml"
                    );

于 2013-05-15T14:08:59.023 回答