2016-12-14 57 views
2

我們有一個遺留代碼庫,我們纔剛剛開始添加單元測試覆蓋率。這意味着,雖然我們有一個龐大的代碼庫(150萬線,至少600班,八方支援,模板文件),我們只需要在整個應用程序的一個或兩個單元測試。 (悲傷但真實)。奧術師的單元測試需要幾分鐘

我的問題是,奧運單元測試(arc unit或部分arc diff)需要四分鐘的時間才能運行。另一方面,PHPUnit只需要幾秒鐘的時間。

單元測試應該是短,尤其是如果它只是在最近的差異。我該如何加快速度,或者,除非這樣,看看奧術師試圖做什麼(這樣我才能優化自己)?

我最好的猜測是,這與arcanist需要查找測試文件的事實有關,而PHPUnit不需要,但在這種情況下,我不知道如何將arcanist默認設置爲正確的目錄。

+0

此[**答案**](https://stackoverflow.com/a/25930854/319204)說明如何設置一個'.arcconfig'指向使用'PhpunitTestEngine'一個'phpunit'測試。除此之外,我懷疑'arc unit' /'arc diff'花費了相當長的時間來確定這些變化。您可以通過檢查「arc unit --everything」是否運行更快來確認。 – TheCodeArtist

回答

0

事實證明,這實際上是不被測試,但通過覆蓋造成的。默認情況下,奧術師試圖提供代碼覆蓋率報告:

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標誌。