使用Composer运行一个项目的所有PHPUnit测试

5
我有一组PHP项目,其中一些依赖于其他项目。所有项目都具有PHPUnit测试,并且可以通过Composer安装,使用composer.json文件指定它们的依赖项。每个项目在其根目录中都有一个phpunit.xml.dist文件,该文件指向一个引导文件。
现在我有这个名为Foo的项目,它有许多直接依赖项和几个间接依赖项。对于Foo的CI,我想运行所有测试以及它的所有依赖项的测试。
是否可以通过Composer实现这一点?如果不能,是否有某种标准干净的方法来实现这一点?
3个回答

5
您可以尝试使用Composer脚本
{
    "scripts": {
        "test": "phpunit"
    }
}

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

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

4
我想您可以编写一个包含所有测试的TestSuite,或编写一个递归地遍历所有目录以查找测试的脚本。然而,通常情况下,您不会运行库和依赖项的测试,除非在您首次安装它们时(也许会)。您不应该真正更改应用程序中的库或依赖项代码(有例外情况),因此一旦安装了依赖项并运行了其测试,假设测试通过,则它们应始终通过,因为您没有更改任何内容。
如果您正在更改依赖项代码,特别是如果您拥有依赖项,那么您确实应该单独执行此操作。我假设您这样做有两个原因:修复错误或添加功能。打开依赖项的项目/文件,为更改编写一个或多个测试,进行更改,确保测试通过,将更改提交给依赖项。然后让您的应用程序拉取更新的依赖项。
简而言之,您不应该担心运行库或依赖项的测试,因为它们应该是您在应用程序中不接触的黑盒子。

在我的情况下,我拥有许多依赖项,并且每当它们更改时都会运行它们的测试。 我同意您的观点,即没有必要严格运行所有测试。 但是,这样做没有任何伤害,它会帮助安抚一些人。 请记住我的问题是如何做到这一点,而不是是否应该这样做。 - Jeroen De Dauw
我知道你问了如何做,我在回答开头给出了一些可能的选项。然而,如果有人问我如何用刀子戳手,我仍会解释为什么他们不应该这样做。话虽如此,如果您这样做是为了安抚或取悦人们,也许您应该让那些“某些人”阅读我的最初答案,这样您就不必运行所有这些测试了。我只是想节省您的时间、压力和理智。我认为这是一种情况,在这种情况下,付出的努力并不值得结果。 - echosa

2

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

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

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

我正在使用CI与Jenkins以及一些内部库,并设置Jenkins在我更改所需库中的内容时启动依赖库的测试。依赖图视图插件有助于管理此过程。 (依赖图视图插件)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接