Arcanist 单元测试需要几分钟时间
Arcanist unit tests take several minutes
我们有一个遗留代码库,我们刚刚开始添加单元测试覆盖率。这意味着虽然我们有一个庞大的代码库(150 万行,至少 600 类,加上支持,模板文件),但我们在整个应用程序中只有一两个单元测试。 (悲伤但真实)。
我的问题是 arcanist 单元测试(使用 arc unit
或 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
中使用 --no-coverage
标志。
我们有一个遗留代码库,我们刚刚开始添加单元测试覆盖率。这意味着虽然我们有一个庞大的代码库(150 万行,至少 600 类,加上支持,模板文件),但我们在整个应用程序中只有一两个单元测试。 (悲伤但真实)。
我的问题是 arcanist 单元测试(使用 arc unit
或 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
中使用 --no-coverage
标志。