测试时如何在Stack中搭配EKG使用并传递+RTS -T参数?
给Stack测试程序传递+RTS -T参数的方法
我来帮你搞定这个问题——要给stack test运行的测试程序传递+RTS -T参数(用来启用GC统计配合ekg),其实有几种实用的方式,不管是临时命令行调用还是持久化配置都能满足需求:
1. 命令行直接传递参数
这是最直接的临时解决方案,在stack test后面加上--test-arguments选项,把RTS参数传进去就行:
stack test --test-arguments="+RTS -T"
如果你的测试程序本身还需要其他参数,可以用-RTS把测试参数和RTS参数分隔开,比如:
stack test --test-arguments="--verbose +RTS -T -RTS"
这里的+RTS和-RTS是GHC运行时的分隔符,确保-T被正确传递给程序的运行时系统,而不是被测试框架当成测试参数处理。
2. 在stack.yaml中持久化配置
如果你不想每次运行测试都手动敲参数,可以在项目的stack.yaml文件里添加全局的测试参数配置:
test-options: arguments: "+RTS -T"
这样以后每次执行stack test,都会自动给所有测试程序带上+RTS -T参数,一劳永逸。
3. 针对特定测试套件配置参数
如果只想给某个特定的测试包传递这个参数,可以在stack.yaml的packages部分单独配置:
packages: - . - package: your-test-target-name test-options: arguments: "+RTS -T"
把your-test-target-name换成你实际的测试目标名称即可。
另外补充一下:你提到的--profile和--trace是Stack本身的选项,用于启用整个构建/测试过程的 profiling 或 tracing,而我们这里需要的是给测试程序本身传递运行时参数,所以用上面的--test-arguments或者配置文件里的arguments字段才是正确的路径。
内容的提问来源于stack exchange,提问作者Damian Nadales
相关产品推荐
相关产品推荐

