2015-02-09 95 views
4

我使用Cabal來運行我的測試。使用代碼覆蓋率運行測試時的Cabal和HPC以及錯誤

這裏是它是如何在.cabal文件中配置:

test-suite test 
    type:   exitcode-stdio-1.0 
    main-is:  Test.hs 
    build-depends: base >= 4.7 && < 4.8, containers >=0.5 && <0.6, ghc, test-framework >=0.8 && <0.9, QuickCheck >=2.7 && <2.8, HUnit >=1.2 && <1.3, test-framework-hunit, test-framework-quickcheck2 
    default-language: Haskell2010 
    ghc-options: -Wall -fhpc 

當我運行測試的第一次,一切都OK了。

不過,如果我更改了測試,並再次運行它們,我得到以下錯誤:

Hpc failure: module mismatch with .tix/.mix file hash number 
(perhaps remove test.tix file?) 

所以,我需要手動刪除.tix文件。

有沒有辦法擺脫這個問題?

順便問一下,有沒有辦法在dist目錄中生成這個.tix文件而不是根目錄?

如何配置我的Cabal文件與HPC很好地協同工作(即在dist目錄中生成HTML文件)?

謝謝。

+0

您是否在使用「--enable-coverage」?如果你不這樣做,那麼你可能應該。如果你這樣做,那麼你不需要'-fhpc'。 – Yuras 2015-02-09 18:44:47

+0

不,我不使用它。我只是試圖使用它,但我得到以下錯誤:'cabal:無法識別的'測試'選項 - 啓用覆蓋率'當運行'cabal測試 - 啓用覆蓋率'。 Cabal用戶指南似乎並未指出如何使用它。你能解釋我如何使用它嗎?謝謝。 – antoyo 2015-02-09 18:55:38

+1

您應該在配置時啓用標誌:'cabal configure --enable-converage'。然後照常運行測試。 – Yuras 2015-02-09 19:12:26

回答

4

爲了cabal生成代碼覆蓋率報告,您可以啓用你的包時:

cabal configure --enable-coverage 

然後運行測試,像往常一樣:

cabal test 

請注意,您可能需要--enable-library-coverage與較舊的cabal。另外IIRC hpc cabal集成被打破爲ghc-7.6

+0

如何運行我的應用程序以獲取dist目錄中的* .tix文件?我嘗試過'cabal run',但* .tix文件是在當前目錄中創建的。 – antoyo 2015-02-15 16:12:05

+1

@antoyo嘗試'HPCTIXFILE'環境變量。試試'cabal test -v3'來看看'cabal'如何使用它。 – Yuras 2015-02-15 16:28:15

1

我使用GHC 7.8.3和卡瓦爾1.22.0.0

您可以設置.tix文件的文件路徑中的幾種方法。

  1. 設置HPCTIXDIR環境變量。 tix文件將在提供的目錄中創建。名稱將被格式化爲-.tix 如果該目錄不存在,它將被創建。

  2. 設置HPCTIXFILE環境變量。 tix文件將使用您在當前工作目錄中提供的文件名創建。您可以指定一個文件路徑。但是,該目錄不會被創建。