【问题标题】:Running all PHPUnit tests for a project using Composer使用 Composer 为项目运行所有 PHPUnit 测试
【发布时间】:2013-10-12 13:28:15
【问题描述】:

我有一组 PHP 项目,其中一些依赖于其他项目。都有 PHPUnit 测试。所有都可以通过 Composer 安装,并使用 composer.json 文件指定它们的依赖项。每个项目的根目录下都有一个 phpunit.xml.dist 文件,该文件指向一个 bootsrap 文件。

现在我有这个项目 Foo,它有许多直接依赖项和几个间接依赖项。对于 Foo 的 CI,我想运行它的所有测试,以及它的所有依赖项。

这是否可以通过 Composer 完成?如果没有,是否有一些标准的干净方式来做到这一点?

【问题讨论】:

    标签: php testing continuous-integration phpunit composer-php


    【解决方案1】:

    你可以试试composer scripts

    {
        "scripts": {
            "test": "phpunit"
        }
    }
    

    或者也许创建一个 makefile 然后使用 composer 调用它

    {
        "scripts": {
            "build-all": "make build-all"
        }
    }
    

    【讨论】:

      【解决方案2】:

      我想您可以编写一个包含所有内容的 TestSuite,或者编写一个递归深入所有目录以查找测试的脚本。

      但是,通常情况下,您不会运行库和依赖项的测试,除非您第一次安装它们。您不会(阅读:不应该)真正更改应用程序中的库或依赖项代码(这有例外),所以一旦您安装了依赖项并运行它的测试,假设它们通过了,它们应该总是通过,因为你没有改变任何东西。

      如果您要更改依赖项代码,您真的应该单独进行,特别是如果您拥有依赖项。我假设您出于以下两个原因之一这样做:修复错误或添加功能。打开您的依赖项的项目/文件,为更改编写一个或多个测试,进行更改,确保测试通过,将更改提交到您的依赖项。然后让您的应用程序下拉更新的依赖项。

      它的 tl;dr 是您不应该担心运行库或依赖项测试,因为这些应该是您在应用程序中不会触及的黑匣子。

      【讨论】:

      • 就我而言,我拥有很多依赖项,每当它们发生变化时,我都会运行它们的测试。我和你一样,并不严格需要一起运行所有测试。然而,这样做并没有什么坏处,而且有助于让一些人放心。请记住我的问题是如何做到这一点,而不是我是否应该这样做。
      • 我知道你问过如何,我在回答的开头给出了几个可能的选项。但是,如果有人问我如何将刀穿过他们的手,我仍然会解释为什么他们不应该这样做。也就是说,如果您这样做是为了安抚/安抚人们,也许您应该让那些“某些人”阅读我的初始答案,这样您就不必进行所有这些测试。我只是想为您节省时间、压力和理智。我觉得这是不值得付出努力的情况之一。
      【解决方案3】:

      Composer 不会帮助您进行任何测试。

      我怀疑它可以自动完成。您事先不知道任何所需库的测试位于何处。甚至可能测试未包含在已发布的库版本中,因为它们没有直接用途。

      如果您知道所有库的测试都位于某个地方,那么您必须自己编写代码以将所有这些测试收集到一个大型元测试套件中。但我想知道这些是否真的有用。

      我正在将 CI 与 Jenkins 和一些内部库一起使用,并且我设置 Jenkins 以在我更改所需库中的某些内容时启动依赖库的测试。 dependency graph view plugin 正在帮助解决这个问题。

      【讨论】:

        猜你喜欢
        • 2012-09-14
        • 2017-02-14
        • 1970-01-01
        • 2016-04-07
        • 2020-04-28
        • 2010-11-27
        • 1970-01-01
        • 2016-04-23
        • 1970-01-01
        相关资源
        最近更新 更多