测试(tasty-smallcheck)和文件组织以及避免孤立实例

时间:2016-08-10 11:23:38

标签: haskell smallcheck

库位于src目录中并且有一个数据定义A.与测试相关的代码在test-directory中,如许多教程中所建议的那样,包括用于生成测试用例的Serial实例,请参阅下面的链接: / p>

instance Monad m => Serial m A where ...

cabal test警告说这是一个孤儿实例。这是不可避免的还是存在组织库的既定惯例,例如,将串行实例定义移动到定义数据A的位置?后者在某种程度上感觉有点不对,因为在测试目录中继续测试相关内容会很好。如果这是典型的方式,那么在哪些方面可以避免在公共接口上暴露测试相关的东西?写'内部'所有测试模块的版本(公共模块和实际测试程序将使用)?在unit-testing question中建议了类似的东西。

或者这件事有关系吗?将orphan实例留在测试相关代码中的惯例有多糟糕?

SmallCheck: Making types instance of typeclass Serial

How to use SmallCheck in Haskell?

1 个答案:

答案 0 :(得分:1)

  

将孤立实例留在测试相关代码中的惯例有多糟糕?

不是很好。我同意@Potonnier的观点。由于Haskell's open-world assumption,孤立实例很不愉快,但我认为你的测试可执行目标是一个相当封闭的世界。我们可以合理地期望没有人会导入测试可执行程序包提供的模块,并且那些模块有" leaves"他们的依赖图。只要这么多是真的,很难想象孤立实例会导致最坏情况的情况:类似于误报的情况,其中测试通过孤立实例而实际上应该失败。这不是一个二元决策,但我认为这里的成本效益分析比较包括测试库作为依赖。