使用Composer为项目运行所有PHPUnit测试

使用Composer为项目运行所有PHPUnit测试,php,testing,continuous-integration,phpunit,composer-php,Php,Testing,Continuous Integration,Phpunit,Composer Php,我有一组PHP项目,其中一些依赖于其他项目。都有PHPUnit测试。所有这些都可以通过Composer安装,并使用Composer.json文件指定它们的依赖项。每个项目的根目录中都有一个phpunit.xml.dist文件,该文件指向一个bootsrap文件 现在我有了这个项目Foo,它有许多直接依赖项和几个间接依赖项。对于Foo的CI,我想运行它的所有测试,以及它的所有依赖项 这有可能通过Composer实现吗?如果没有,是否有一些标准的、干净的方法可以做到这一点?我想您可以编写一个包含所有

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

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


这有可能通过Composer实现吗?如果没有,是否有一些标准的、干净的方法可以做到这一点?

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

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

如果您正在更改依赖项代码,那么应该单独进行更改,尤其是在您拥有依赖项的情况下。我假设您这样做的原因有两个:修复bug或添加功能。打开依赖项的项目/文件,为更改编写一个或多个测试,进行更改,确保测试通过,然后将更改提交给依赖项。然后让您的应用程序下拉更新的依赖项


tl;最重要的是,您不应该担心运行库测试或依赖性测试,因为这些应该是您在应用程序中不接触的黑盒。

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

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

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

我将CI与Jenkins和一些内部库一起使用,并设置Jenkins,以便在我更改所需库中的某些内容时开始测试依赖库。正在帮助管理它。

您可以尝试

或者创建一个,然后使用composer调用它

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

在我的例子中,我拥有很多依赖项,每当它们发生变化时,我都会运行它们的测试。我同意你的观点,严格来说,不需要同时运行所有测试。然而,这样做没有害处,而且有助于让一些人放心。记住我的问题是如何做,而不是我是否应该做。我知道你问了如何做,我在回答的开始部分给出了几个可能的选择。然而,如果有人问我如何用刀刺穿他们的手,我仍然会解释为什么他们不应该这样做。也就是说,如果你这样做是为了安抚人们,也许你应该让那些“某些人”阅读我的初始答案,这样你就不必运行所有这些测试。我只是想帮你节省时间、压力和理智。我觉得这是一个不值得付出努力的案例。
{
    "scripts": {
        "build-all": "make build-all"
    }
}