【问题标题】:PHPUnit/Xdebug Code Coverage for Codeigniter API CallsCodeigniter API 调用的 PHPUnit/Xdebug 代码覆盖率
【发布时间】:2011-07-23 05:55:18
【问题描述】:

我们正在使用 Codeigniter,并且有 2 个选项来调用我们的 API 控制器:

  1. 我们可以使用客户端,通过Curl调用控制器的url,
  2. 我们可以使用从命令行调用控制器的客户端。

这非常适合我们网站的功能。但是,当我运行 PHPUnit 时,控制器的覆盖率报告是空白的,而所有模型的覆盖率报告都是正确的。

在跟踪 xdebug 如何创建报告时,似乎使用基于 Curl 的客户端或 CLI 客户端在测试函数范围之外被调用,因此 xdebug_get_code_coverage() 不会跟踪执行的控制器代码。

在这种情况下是否可以配置 xdebug 来识别代码覆盖率?是否可以在 PHPUnit 测试功能范围内调用 Codeigniter 控制器?还有其他可能的解决方案吗?

【问题讨论】:

    标签: unit-testing codeigniter phpunit code-coverage xdebug


    【解决方案1】:

    是的,这很容易实现。有关更多信息,请参阅http://www.phpunit.de/manual/current/en/selenium.html

    基本上你把一些特殊的文件放在你的网络根目录中:

    PHPUnit_Extensions_SeleniumTestCase 可以为通过 Selenium 运行的测试收集代码覆盖率信息: 将PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.php 复制到您的网络服务器的文档根目录中。 在您的网络服务器的 php.ini 配置文件中,将 PHPUnit/Extensions/SeleniumTestCase/prepend.phpPHPUnit/Extensions/SeleniumTestCase/append.php 分别配置为 auto_prepend_fileauto_append_file。 在扩展 PHPUnit_Extensions_SeleniumTestCase 的测试用例类中,使用 protected $coverageScriptUrl = 'http://host/phpunit_coverage.php'; 配置 phpunit_coverage.php 脚本的 URL。

    当运行带有 GET 参数 PHPUNIT_SELENIUM_TEST_ID 的 URL 时,覆盖信息会被跟踪,PHPUnit 可以通过请求 coverageScriptUrl 来收集它。

    【讨论】:

      【解决方案2】:

      另一种选择:查看我们的SD PHP Test Coverage 工具。

      它不使用 xdebug 来收集覆盖率数据,所以不会有 xdebug 的具体问题。它检测一个脚本来收集测试覆盖率数据;一旦检测完毕,无论脚本如何执行,您获得测试覆盖率数据。 (插桩是临时的;一旦你拥有了插桩代码,你就扔掉了 收集的测试覆盖率数据,因此它不会影响您的生产代码库)。 这种方法确实需要您明确列出所有需要覆盖数据的 PHP 脚本;如果你愿意,你可以忽略一些。通常不值得费心。大多数用户只是简单地列出所有 PHP 脚本。

      【讨论】:

      • 你仍然需要修改你的代码库。除此之外,这不是您想表达的 xdebug 问题。
      • @cweiske:OP 特别问,“还有其他解决方案吗?”
      • @cweiske:您不必修改代码库。 工具 会生成一个您运行的检测副本,该副本具有与您的原始代码完全相同的功能,而且还收集测试覆盖率数据。您运行检测版本,然后将其丢弃。您的原始版本没有被手动触摸或修改。检测您拥有的每个脚本只需要几分之一秒,该过程是自动化的并且非常可靠(因为它建立在类似编译器的 PHP 前端)。
      猜你喜欢
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 2012-05-04
      • 2012-08-04
      • 2012-03-07
      • 2021-03-03
      • 2018-05-29
      • 2012-01-18
      相关资源
      最近更新 更多