【问题标题】:Adding PHPUnit to an existing Cakephp 2.0将 PHPUnit 添加到现有的 Cakephp 2.0
【发布时间】:2015-05-05 19:15:05
【问题描述】:

有谁知道如何将 PHPUnit 添加到不是使用 composer 创建的现有 CakePHP 2.0 项目中?

我正在尝试将 PHPUnit 添加到不是使用 composer 创建的现有 CakePHP 2.0 项目中,我无法让 CakePHP 看到 PHPUnit 已安装。我使用的是 Windows 机器。

以下是我目前采取的步骤:

  1. 通过 composer 全局安装 PHPUnit 3.7.32
  2. 将 PHPUnit 添加到我的路径中
  3. 从命令行验证安装,即 phpunit --version
  4. 将位置添加到 php.ini 中的 PHP include_path
  5. 重新启动服务器
  6. 使用 Composer 安装了一个新的 CakePHP 项目(测试 CakePHP 可以看到 PHPUnit)
  7. 成功测试安装了 PHPUnit 的新项目

提前致谢。

【问题讨论】:

  • 澄清“我无法让 CakePHP 看到 PHPUnit 已安装。”。你得到了什么确切的错误,你在哪里得到它?
  • test.php 页面显示未安装 PHPUnit。通过 cake testsuite 命令运行测试会报错,指出必须安装 PHPUnit。

标签: cakephp phpunit


【解决方案1】:

我终于能够将 PHPUnit 添加到不是使用 composer 创建的现有 CakePHP 项目中。

我查看了 CakeTestSuiteDispatcher.php 文件,看看它试图在哪里找到 PHPUnit。它在供应商、app/Vendor 和 include_path 中查找名为 PHPUnit 的文件夹,该文件夹包含 Autoload.php 文件(感谢 Nick Zinger 在此方面的帮助)。一旦复制了这个文件夹,CakePHP 将看到 PHPUnit 已安装,但在包含依赖项(代码覆盖率、计时器等)时会抛出错误。以下是我为使一切正常运行所采取的步骤。

  1. 确保您在 app/config/Database.php 中设置了测试数据库,否则您的主数据库可能会被覆盖或损坏
  2. 通过 Composer 使用 PHPUnit(我使用 3.7.38 版)将新的 CakePHP(2.6.2 版)项目安装到新位置
  3. 将新项目中带有Autoload.php文件(phpunit/phpunit/PHPUnit)的内部PHPUnit文件夹复制到旧项目的cakephp vendor文件夹(app外部文件夹)中
  4. 将以下文件夹从 phpunit 文件夹(从在步骤 1 中使用 composer 创建的项目)复制到您现有的供应商文件夹(应用程序之外的那个):
    • php-code-coverage
    • php-file-iterator
    • php-text-template
    • php-timer
    • php-token-流
    • phpunit-mock-objects
  5. 在现有项目的以下文件中更新 require_once 路径(我使用了绝对路径):
    • PHPUnit/Autoload.php
    • php-code-coverage/PHP/CodeCoverage/Autoload.php

完成这些更改后,CakePHP 测试套件就可用了,我就可以运行我的测试用例了。这适用于我的 CakePHP 项目(v2.0.6)和我的同事 CakePHP 项目(v2.0.6)。

我希望这可以帮助遇到同样问题的其他人。

【讨论】:

    【解决方案2】:

    如果您对此仍有疑问,请按照以下方式解决问题:

    1. https://github.com/sebastianbergmann/phpunit/tree/3.7下载源码

    2. 将内部 PHPUnit 文件夹(包含 Autoload.php 的文件夹)复制到 php 包含的路径中。确保包含该路径,并且可以从该路径直接访问 PHPUnit/Autoload.php。

    3. 重启apache

    完成上述操作后,它应该可以工作了。

    【讨论】:

    • 您好,尼克,谢谢您的回答。我已经尝试过了,但不幸的是它对我不起作用。我仍然看到消息“未安装 CakePHP 测试套件 2.0 PHPUnit!”。以下是我采取的步骤: 1)下载并解压缩 phpunit 文件夹 2)将内部 PHPUnit 文件夹复制到我的文档文件夹 3)将以下内容添加到我的 php.ini include_path ".;C:\Users\Username\Documents\PHPUnit " 4) 重启apache
    • 结构是什么样的?如果 Autoload.php 位于 PHPUnit 文件夹中,那么您的包含路径应​​为:“.;C:\Users\Username\Documents”
    • PHPUnit 文件夹包含五个文件夹(Extensions、Framework、Runner、TextUI、Util)和 Autoload.php 和 Autoload.php.in。我将 include_path 修改为“.;C:\Users\Username\Documents”并重新启动了 apache。我使用 phpinfo() 检查了 include_path 设置,并且 include_path 已更新,但我仍然收到“未安装 PHPUnit”消息。
    • 尝试将 PHPUnit 文件夹复制到另一个标准 include_paths 中。可能是权限问题。
    • 我将 PHPUnit 文件夹移动到 ZendServer 上的标准 include_path 文件夹“ZendServer\share\ZendFramework\library\Zend”,但我仍然收到“未安装 PHPUnit”的消息。我是否需要向引导文件添加导入或其他方式让 CakePHP 知道 PHPUnit 已安装?我用composer创建了一个新项目(CakePHP 2.6),它能够发现PHPUnit安装在include_path上,我可以运行核心测试,那么composer是否在CakePHP配置中添加了一些东西来添加PHPUnit?
    【解决方案3】:

    我按照以下步骤操作:

    1. 通过 composer 安装 PHPUnit [我在这个目录下安装了 PHPUnit ~/CompanyName/Projects/Project/app]

    curl -sS https://getcomposer.org/installer | php

    php composer.phar 需要 --dev phpunit/phpunit:"3.7.38" --ignore-platform-reqs

    1. 记得在 app/Config/core.php 中将调试级别设置为 1

    2. 添加 $test 数据库配置:

    public $test = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host'       => 'localhost',
    'login'      => 'user',
    'password'   => 'password',
    'database'   => 'test_database'
    );
    
    1. 在这里创建了一个虚拟文件:app/Test/testMyClass.php

    class MyClassTest extends PHPUnit_Framework_TestCase {
         public function testCreateMyClass() {
            // Tests are written here
         }
    }
    ?>
    
    1. 运行测试文件:

    ./vendor/bin/phpunit --bootstrap vendor/autoload.php app/Test/testMyClass.php

    【讨论】:

      【解决方案4】:

      您需要在终端中运行以下代码。 (路径:在你的项目 cakephp 中)

      composer require --dev phpunit/phpunit:"3.7.38"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-29
        • 1970-01-01
        • 2019-12-07
        • 2014-04-20
        • 2010-11-28
        • 2016-12-28
        • 1970-01-01
        • 2013-06-01
        相关资源
        最近更新 更多