Phpunit Arcanist单元测试需要几分钟
我们有一个遗留的代码库,我们刚刚开始添加单元测试覆盖率。这意味着,虽然我们有大量的代码库(150万行,至少600个类,加上支持,模板文件),但在整个应用程序中我们只有一到两个单元测试。(悲伤但真实) 我的问题是,arcanist单元测试(使用Phpunit Arcanist单元测试需要几分钟,phpunit,arcanist,Phpunit,Arcanist,我们有一个遗留的代码库,我们刚刚开始添加单元测试覆盖率。这意味着,虽然我们有大量的代码库(150万行,至少600个类,加上支持,模板文件),但在整个应用程序中我们只有一到两个单元测试。(悲伤但真实) 我的问题是,arcanist单元测试(使用arc单元或部分arc diff)运行需要超过四分钟。另一方面,PHPUnit只需要几秒钟 单元测试应该很短,特别是如果它只是在最近的差异上。我如何加快这些测试,或者,如果没有,看看arcanist正在尝试做什么(这样我就可以优化自己) 我最好的猜测是,这与
arc单元
或部分arc diff
)运行需要超过四分钟。另一方面,PHPUnit只需要几秒钟
单元测试应该很短,特别是如果它只是在最近的差异上。我如何加快这些测试,或者,如果没有,看看arcanist正在尝试做什么(这样我就可以优化自己)
我最好的猜测是,这与arcanist需要查找测试文件有关,而PHPUnit不需要,但在这种情况下,我不知道如何将arcanist默认为正确的目录。事实证明,这实际上不是由测试引起的,而是由覆盖率引起的。默认情况下,Arcanist尝试提供代码覆盖率报告:
PASS 14ms★ Test\Unicorn\Feeds\Somber\DubStep::testLoadBadType
PASS 5ms★ Test\Unicorn\Feeds\Somber\DubStep::testLoadBadJSON
PASS 8ms★ Test\Unicorn\Feeds\Somber\DubStep::testLoadBadSeasonWeek
PASS 148ms Test\Unicorn\Feeds\Somber\DubStep::testEmptyData
PASS 200ms Test\Unicorn\Feeds\Somber\DubStep::testCompleteLoad
PASS 5ms★ Test\Fantasy\Feeds\Somber\DubStep::testGetProjectionStats
PASS 5ms★ Test\Fantasy\Feeds\Somber\DubStep::testGetNumGamesPlayed
PASS 12ms★ Test\Unicorn\Feeds\Somber\DubStep::testIsStatBonus
PASS 140ms Test\Fantasy\Feeds\Somber\DubStep::testIsPlayerUpdatedBaseConditions
PASS 7ms★ Test\Fantasy\Feeds\Somber\DubStep::testCalcNormalizedWeekProjection
COVERAGE REPORT
0% tests/feeds/lib/Feeds/Somber/Extension/usfoak-qub-te-hk3.json
0% tests/feeds/lib/Feeds/Somber/DubStep.php
93% feeds/lib/Feeds/Somber/PlayerProjectedStats.php
覆盖率—它针对整个存储库运行一个完整的覆盖率报告,并且不缓存结果。这意味着每个arc diff
中的每个文件都有一个覆盖率报告运行。在一个小项目中,这不是什么大问题,但在一个大项目中,这会产生重大影响。避免这种情况的最佳方法是直接使用phpunit
覆盖率报告,并在所有arc diff
s中使用-no coverage
标志。这说明了如何设置.arcconfig
以使用phpunitstengine
指向phpunit
测试。除此之外,我怀疑arc unit
/arc diff
花了相当长的时间来识别这些变化。您可以通过检查arc unit——一切运行得更快来确认这一点。