Phpunit Arcanist单元测试需要几分钟

Phpunit Arcanist单元测试需要几分钟,phpunit,arcanist,Phpunit,Arcanist,我们有一个遗留的代码库,我们刚刚开始添加单元测试覆盖率。这意味着,虽然我们有大量的代码库(150万行,至少600个类,加上支持,模板文件),但在整个应用程序中我们只有一到两个单元测试。(悲伤但真实) 我的问题是,arcanist单元测试(使用arc单元或部分arc diff)运行需要超过四分钟。另一方面,PHPUnit只需要几秒钟 单元测试应该很短,特别是如果它只是在最近的差异上。我如何加快这些测试,或者,如果没有,看看arcanist正在尝试做什么(这样我就可以优化自己) 我最好的猜测是,这与

我们有一个遗留的代码库,我们刚刚开始添加单元测试覆盖率。这意味着,虽然我们有大量的代码库(150万行,至少600个类,加上支持,模板文件),但在整个应用程序中我们只有一到两个单元测试。(悲伤但真实)

我的问题是,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——一切运行得更快来确认这一点。