运行 代码覆盖率测试时的 Cabal 和 HPC 以及错误

Cabal and HPC and Errors when Running Tests with Code Coverage

我使用 Cabal 来 运行 我的测试。

.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

当我运行第一次测试时,一切正常。

但是,如果我更改测试并再次 运行 它们,我会收到以下错误:

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

所以,我需要手动删除 .tix 文件。

有没有办法解决这个问题?

顺便问一下,有没有办法在 dist 目录而不是根目录中生成这个 .tix 文件?

如何配置我的 Cabal 文件以与 HPC 很好地协同工作(即在 dist 目录中生成 HTML 文件)?

谢谢。

要使 cabal 生成代码覆盖率报告,您可以在配置包时启用它:

cabal configure --enable-coverage

然后 运行 照常测试:

cabal test

请注意,您可能需要 --enable-library-coverage 和较旧的 cabal。此外,IIRC hpc 在 cabal 中的集成因 ghc-7.6.

而中断

我正在使用 GHC 7.8.3 和 Cabal 1.22.0.0

您可以通过多种方式设置 .tix 文件的文件路径。

  1. 设置 HPCTIXDIR 环境变量。 tix 文件将在提供的目录中创建。名称将被格式化为 -.tix 如果该目录不存在,将创建它。

  2. 设置 HPCTIXFILE 环境变量。将使用您在当前工作目录中提供的文件名创建 tix 文件。您可以指定文件路径。但是,不会创建该目录。