我通常会选择单独的包选项,但我不使用
stack test --coverage
(编辑:我可能会这样做,然后只在运行时使用测试标志选项。)
stack test --coverage --flag thepackage:arbitrary
这样就没有其他人需要处理这些旗帜了。)
这也可能值得一提
--coverage
关于
stack
问题追踪器,因为在这种情况下,覆盖率检查将很好地工作。
如果您要求其他选项,最好的选项可能是测试标志。
可以在cabal文件中定义一个标志(默认为false),如果选中该标志,该标志将仅使用QuickCheck依赖项构建模块。
将所需代码放入目录中
arbitrary
package.yaml
(第1段)或
the-library.cabal
(第二段)文件:
flags:
arbitrary:
description: Compile with arbitrary instances
default: false
manual: true
library:
â
when:
- condition: flag(arbitrary)
dependencies:
- QuickCheck
source-dirs:
- arbitrary
flag arbitrary
description: Compile with arbitrary instances
manual: True
default: False
library
â
if flag(arbitrary)
hs-source-dirs:
arbitrary
build-depends:
QuickCheck
stack.yaml
cabal.project
(2)档案:
flag:
the-library:
arbitrary: true
constraints: the-library +arbitrary
但有一个小问题,目前该库无法仅依赖
+arbitrary
版本仅在其测试套件中,除非它还定义了这样一个标志。这可能是值得付出的代价。
注意:我还没有测试下游包装。
Ivan Milenovic's blog
作为初始资源非常有用。
现在GHC 8.6已经发布,可能还有另一种可能性,即
DerivingVia
Blöndal, Löh & Scott (2018)
对于
Arbitrary
实例。
武断的
对于那些新类型。
事实上,这并不能完全避免这个问题。但您可能能够实现
Generic
对于这些新类型,实例可以使用
generic-arbitrary
匹配你想要的。
可能还有其他选择。特别地,
QuickCheck
的依赖性实际上并没有那么重。还有其他的测试库。另外,请注意,已经有一些关于分离
-类似于将typeclass转换为独立库。
我还建议使用内部库,但这不允许其他包使用您的实例。