声明任意实例时避免构建对 QuickCheck 的依赖

Are*_* Fu 4 testing haskell unit-testing quickcheck build-dependencies

假设我有一个名为 的 Haskell 模块Foo,在src/Foo.hs. 还假设Foo导出一个类型Bar

现在我想为BarFoo实际上是整个模块)编写单元测试,所以我将几个 QuickCheck 属性放入test/FooTest.hs; 但是,嘿,现在我需要ArbitraryBar.

还有一个问题:在-Wall -Werror模式中,ghc需要实例声明出现在两个地方之一:在定义类型的同一个文件中,或者在定义类的地方。但我不想让我的Foo模块与 QuickCheck 的构建依赖关系混乱,而且我显然无法Bar向 QuickCheck添加实例。

那么如何使我的数据类型成为 的实例Arbitrary,仅用于单元测试,而不为我的模块的用户引入对 QuickCheck 的依赖,并且不会抛出-Wall -Werror窗口?

dan*_*iaz 5

在测试套件中,创建一个 newtype,它包装Bar并定义Arbitrarynewtype的实例。