【问题标题】:How to configure PHPUnit to test the whole vendor folder in a ZF2 application?如何配置 PHPUnit 以测试 ZF2 应用程序中的整个供应商文件夹?
【发布时间】:2015-07-22 04:19:48
【问题描述】:

我正在开发一个具有通用文件夹结构的 Zend Framework 2 应用程序,因此文件夹 /vendor 包含所有(项目外部)库。设置单元测试环境我希望能够运行所有供应商测试。文件夹结构因库而异。有些包根本没有测试。

一个可能的解决方案是创建一个测试套件“供应商”并在那里手动定义每个测试文件夹的路径,例如:

phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit ...>
    <testsuites>
        <testsuite name="vendor">
            <directory>../vendor/lib-foo/path/to/tests</directory>
            <directory>../vendor/package-bar/path/to/tests</directory>
            ...
        </testsuite>
        ...
    </testsuites>
    ...
</phpunit>

我不喜欢这个解决方案。首先是因为我必须手动处理每个包裹。

另一种解决方案是将/vendor 定义为测试文件夹:

phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit ...>
    <testsuites>
        <testsuite name="vendor">
            <directory>../vendor</directory>
            ...
        </testsuite>
        ...
    </testsuites>
    ...
</phpunit>

好吧,但是 PHPUnit 必须扫描很多它不需要的文件夹,并且测试将需要更多时间。

是否有更好的解决方案,可以使流程自动化并避免大量手动配置?

【问题讨论】:

  • 但是为什么要这样做呢?你有很多不稳定的供应商包(开发分支等)吗?大多数稳定包都由供应商自己测试,并且只有在所有测试都通过时才作为稳定版本发布。
  • 其实你是对的——外部包通常是经过测试的。我只想确保这一点,例如,如果我更新依赖项(例如使用composer update)并安装了新版本的外部库。此外,如果不仅使用众所周知且经过良好测试的开源软件包(如 Zend Framework 或 Symfony),而且使用具有较低“信任级别”/QA 级别的外部库,例如由合作伙伴、组织的其他部门等提供的库。

标签: php zend-framework2 phpunit test-suite


【解决方案1】:

通过一次测试运行所有 PHPUnit 供应商的测试套件可能会很困难。一个问题是每个不同的测试套件都可能提供自己的配置文件,甚至需要自定义 bootstrap 配置文件。使用单个命令运行所有测试套件时,您无法涵盖这一点。

我可能会为此使用一些 shell 魔法。请注意,此示例依赖于您的每个 3rd 方包中存在 phpunit.xml(.dist) 文件(对于大多数库来说,这是一个合理的假设)。您甚至可以将其集成到您的持续集成过程中以持续测试:

for FILE in $(find . -name 'phpunit.xml*') ; do
    sh -c 'cd '$(dirname $FILE)' && composer install'
    vendor/bin/phpunit -c $FILE
done

【讨论】:

  • 感谢您的解决方案!你是对的,很难找到一种方法来测试所有具有不同设置和Bootstrap 类的外部库,并运行一次 PHPUnit 测试。我不确定这对我的情况是否方便,所以我不会接受答案(至少现在)。但无论如何,这是一种有趣的方法和可能的解决方案。谢谢你! +1
  • 顺便说一句:你为​​什么每次运行和每个库都执行composer install
  • @automatix,我在自己的一个项目中进行了测试,发现有很多引导文件等等。像include "../vendor/autoload.php" 或以其他方式依赖于本地 安装的作曲家依赖项。为每个库做一个composer install 似乎是解决这个问题的最简单方法。
猜你喜欢
  • 2015-01-21
  • 1970-01-01
  • 2021-05-21
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多