将 PHPUnit 添加到现有的 Cakephp 2.0

Adding PHPUnit to an existing Cakephp 2.0

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

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

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

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

提前致谢。

如果您仍然对此有疑问,请按照我的方法使其正常工作:

  1. https://github.com/sebastianbergmann/phpunit/tree/3.7

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

  4. 重启apache

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

我终于能够将 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文件夹复制到旧项目的cakephpvendors文件夹(app外的文件夹)
  4. 将以下文件夹从 phpunit 文件夹(从第 1 步中使用 composer 创建的项目)复制到您现有的 vendors 文件夹(app 外部的文件夹):
    • php-代码覆盖率
    • php-文件迭代器
    • php-文本模板
    • php-定时器
    • php-令牌流
    • php单元模拟对象
  5. 更新现有项目中以下文件中的 require_once 路径(我使用的是绝对路径):
    • PHPUnit/Autoload.php
    • php-code-coverage/PHP/CodeCoverage/Autoload.php

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

我希望这对遇到同样问题的其他人有所帮助。

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

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

我遵循了以下步骤:

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

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

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

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

  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