acf*_*zer 18 haskell quickcheck cabal
我有一个cabal包,可以导出一个NBT可能对其他开发人员有用的类型.我经历了Arbitrary为我的类型定义一个实例的麻烦,如果没有将它提供给其他开发人员来测试他们整合我的工作的代码,那将是一种耻辱.
但是,我想避免我的实例可能妨碍的情况.也许其他开发人员对实例应该是什么有不同的想法Arbitrary.也许我的软件包依赖于特定版本的QuickCheck可能会干扰或不需要客户端项目的依赖项.
我的想法没有特别的顺序,是:
Arbitrary实例保留在类型定义旁边,让客户端处理实例的阴影或覆盖QuickCheck版本号.Arbitrary实例在同一封装内的单独的模块孤儿例如,假设Data.NBT.Arbitrary.QuickCheck对整个包的依赖性仍然存在.Arbitrary在完全独立的包中提供实例,以便可以将其列为客户端项目的单独测试依赖项.Arbitrary在主包中包含实例和QuickCheck依赖项,但仅在-ftest设置了类似标志的情况下.我已经看到所有这些在其他库中使用的组合,但没有找到任何最佳工作的共识.我想在上传到Hackage之前尝试正确使用它.
问题归结为:使用您的库的人想要使用您的NBT类型运行 QuickCheck 测试的可能性有多大?
如果可能,并且任意实例是详细的(因此不太可能针对不同的人进行更改),那么最好将其与您的包一起提供,特别是如果您要确保不断更新包(至于是否使用标志,这取决于个人喜好)。然而,如果实例相对简单(因此人们更有可能想要自定义它),那么在文档中提供示例实例可能是一个想法。
如果类型本质上主要是内部的,并且不太可能被想要运行测试的其他人使用,那么使用标志有条件地引入 QuickCheck 可能是避免不必要的依赖关系的最佳方法(即测试套件就在那里)您可以测试该包)。
一般来说,我不喜欢仅使用 QuickCheck 包,尽管它在某些情况下可能很有用。