运行 代码覆盖率测试时的 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 文件的文件路径。
设置 HPCTIXDIR 环境变量。 tix 文件将在提供的目录中创建。名称将被格式化为 -.tix
如果该目录不存在,将创建它。
设置 HPCTIXFILE 环境变量。将使用您在当前工作目录中提供的文件名创建 tix 文件。您可以指定文件路径。但是,不会创建该目录。
我使用 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 文件的文件路径。
设置 HPCTIXDIR 环境变量。 tix 文件将在提供的目录中创建。名称将被格式化为 -.tix 如果该目录不存在,将创建它。
设置 HPCTIXFILE 环境变量。将使用您在当前工作目录中提供的文件名创建 tix 文件。您可以指定文件路径。但是,不会创建该目录。