【问题标题】:How to bundle PHPUnit with my code?如何将 PHPUnit 与我的代码捆绑在一起?
【发布时间】:2012-10-01 20:03:49
【问题描述】:

我想:

  • 无论我的环境如何(以及是否安装了 PHPUnit 或 PEAR),都使用 PHPUnit 运行测试
  • 如果可能,在屏幕上显示测试结果

我该怎么做?我尝试下载代码here 并包括Autoload.php,但它仍然有一些依赖项。也许有一些比尝试将它与我的代码捆绑在一起更好的方法......?

【问题讨论】:

    标签: php unit-testing phpunit


    【解决方案1】:

    要在您的项目源文件中包含 PHPUnit,我建议您遵循指南:

    Using PHPUnit From a Git Checkout 来自 PHPUnit 贡献部分。

    它会告诉您需要安装的所有包,并显示您为 phpunit 可执行文件构建运行器/包装器脚本。

    #!/bin/bash
    php -d include_path='.:../phpunit/:../dbunit/:../php-code-coverage/:../php-file-iterator/:../php-invoker/:../php-text-template/:../php-timer:../php-token-stream:../phpunit-mock-objects/:../phpunit-selenium/:../phpunit-story/:/usr/local/lib/php' ../phpunit/phpunit.php $*
    

    您可以根据需要调整路径,或者如果您想将其包装在另一个脚本中,您也可以通过

    以编程方式使用 phpunit
    require '/path/to/phpunit/PHPUnit/Autoload.php';
    PHPUnit_TextUI_Command::main();
    

    这假设您有一个 phpunit.xml.dist 文件,或者您在调用包装脚本时使用了正确的 cli 参数。


    您也可以使用 pear 包并解压所有稳定版本,而不是使用 git checkout 来节省一些磁盘和 repo 空间。包装脚本和所有包含路径的工作都是一样的 :)


    相关的 SO 问题:

    PHP - Is there a portable version of PHPUnit?

    PHPUNIT without installation

    【讨论】:

      【解决方案2】:

      依赖项将取决于您使用的附加组件,PHPUnit 本身应该是自包含的。由于 PHP 没有特别一致的包管理解决方案(并且您已经消除了除了轮子改造之外最可行的选项),您最好的选择是将文件包含在源代码树中与应用程序代码分开。从您的 APPLICATION_ROOT 或类似目录创建一个名为“test”的同级目录,并且该目录具有一个充满 PHPUnit 的“lib”或类似目录以及您需要的任何依赖项,这可能是一个不错的计划。从测试目录到主应用程序源应该没有重叠和单向依赖。

      我假设您正在寻找一个运行状况检查自动化测试页面,因此您可以创建包含该测试目录所需内容的单个页面。理想情况下,如果您有暴露静态资源的 web 目录,您可以拥有负责加载应用程序前端控制器的 PHP 文件,方法是从文档根目录外部包含应用程序文件夹,然后再加载第二个文件测试套件。这将允许您的应用程序目录继续专注于应用程序代码本身、存放测试代码的测试目录,然后是负责加载代码库的 2 个小包含文件(带有任何类型的共享常量定义等)。也提取并保持干燥)。

      【讨论】:

      • 那时我一定是以错误的方式包含库,但我在官方文档中没有看到如何做到这一点。而关于“healthceck 自动化测试页面”,它必须在项目文件夹中,所以我部署时它可以在生产服务器中。我不知道如何在屏幕上显示测试,因为文档似乎只讨论命令行。
      • 显示结果应该在文档的报告生成部分(您也可以在文档根目录下发布报告)。如果你走这条路,测试应该在部署的文件夹中,但它应该是应用程序代码目录的同级,而不是在它下面。应该有一种方法可以分派到 2 个不同的文件夹,而不必混合代码。对于执行,我将从命令行方法(通过 PHP 调用)开始,因为这是手动或使用构建工具运行测试的方式,然后再考虑交换 API 调用。
      • 但是如何从我的代码中正确包含库?以及如何从 php 本身运行测试(没有命令行)?
      • 像任何其他文件一样根据需要使用 require 或 autoloader。 PHP 对代码的来源非常无动于衷。使用类似的东西运行:phpunit.de/manual/3.0/en/…
      【解决方案3】:

      有一个一致的 PHP 包管理解决方案 - http://getComposer.org。它现在还可以以通常的作曲家风格安装 PHPunit,http://packagist.org/packages/phpunit/phpunit

      安装软件后,它会将 phpunit 命令行脚本放入本地 'bin/' 目录,因此您可以调用它,但您可能希望有一个 shell 脚本来设置它将使用的配置文件.

      通常的设置是一个 tests/ 子目录,其中包含运行实际测试的 PHPunit 扩展类的层次结构。

      【讨论】:

      • ..composer 也不是可移植的。
      猜你喜欢
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 2018-05-16
      • 2017-05-12
      • 1970-01-01
      相关资源
      最近更新 更多