首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用HPC和Stack生成覆盖覆盖?

如何使用HPC和Stack生成覆盖覆盖?
EN

Stack Overflow用户
提问于 2017-09-29 12:03:13
回答 1查看 216关注 0票数 7

我有一个中小型的Haskell代码库,我想为它生成一个覆盖报告。默认情况下,HPC提供的覆盖范围报告充满了假阴性(例如,我使用镜头来访问我的大多数记录字段,而不是自动生成的记录字段,然后HPC会报告为未覆盖)。

典型的解决方案是生成一些覆盖图,如下所示:https://wiki.haskell.org/Haskell_program_coverage#Hpc_toolkit

当我尝试用Stack做这件事时,我遇到了一个问题。

代码语言:javascript
复制
$ stack new --resolver=lts-9.5 hpcTest

如果我们将src/Lib.hs编辑为:

代码语言:javascript
复制
module Lib
( someFunc, otherFunc
) where

someFunc :: IO ()
someFunc = putStrLn "someFunc"

otherFunc :: IO ()
otherFunc = putStrLn "otherFunc"

test/spec.hs为:

代码语言:javascript
复制
import Lib

main :: IO ()
main = someFunc

并运行stack test --coverage

我们得到的覆盖率报告没有100%覆盖,所以如果我们遵循维基页面的说明,我们会得到:stack exec hpc -- draft --hpcdir=.stack-work/dist/x86_64-linux/Cabal-1.24.2.0/hpc/ --srcdir=. .stack-work/install/x86_64-linux/lts-9.5/8.0.2/hpc/hpcTest/hpcTest-test/hpcTest-test.tix > myDraft.txt

当我们在myDraft.txt中运行它时,会得到以下结果

代码语言:javascript
复制
module "hpcTest-0.1.0.0-HnYRxRg1qoiyMKwsCMtby:Lib" {
  tick function "otherFunc" on line 9;
}

然后,当我们执行下一步并尝试生成覆盖stack exec hpc -- overlay --hpcdir=.stack-work/dist/x86_64-linux/Cabal-1.24.2.0/hpc/ --srcdir=. myDraft.txt时,该过程会失败,并得到以下错误:

代码语言:javascript
复制
hpc: can not find hpcTest-0.1.0.0-HnYRxRg1qoiyMKwsCMtby:Lib in ./.hpc, ./.stack-work/dist/x86_64-linux/Cabal-1.24.2.0/hpc/
CallStack (from HasCallStack):
  error, called at libraries/hpc/Trace/Hpc/Mix.hs:122:15 in hpc-0.6.0.3:Trace.Hpc.Mix

在这个过程中,我做错了什么?我如何才能让它正常工作?

EN

回答 1

Stack Overflow用户

发布于 2018-11-06 05:01:47

/替换:。准则草案应为

代码语言:javascript
复制
module "hpcTest-0.1.0.0-HnYRxRg1qoiyMKwsCMtby/Lib" {
  tick function "otherFunc" on line 9;
}

通过查看stack hpc创建的tix文件,我发现了这一点。(lol)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46481633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档