1

一个库在 src-directory 中,并且有一个数据定义 A。与测试相关的代码在 test-directory 中,正如许多教程中所建议的那样,其中包括用于生成测试用例的串行实例,请参见下面的链接:

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

cabal test警告这是一个孤儿实例。这是不可避免的还是有组织库的既定约定,例如,将串行实例定义移动到定义数据 A 的位置?后一种感觉有点不对劲,因为在测试目录中继续测试相关的东西会很好。如果这是一种典型的方式,那么可以通过哪些方式避免在公共接口上暴露测试相关的东西?编写所有测试模块的“内部”版本(公共模块和实际测试程序将使用)?单元测试问题中提出了类似的建议。

或者这根本不重要?在测试相关代码时留下孤立实例是多么糟糕的约定?


SmallCheck:制作类型类 Serial 的类型实例

如何在 Haskell 中使用 SmallCheck?

4

1 回答 1

1

在测试相关代码时留下孤立实例是多么糟糕的约定?

不是特别的。我在这里同意@Potonnier。由于Haskell 的开放世界假设,孤立实例令人不快,但我认为您的测试可执行目标是一个相当封闭的世界。我们可以合理地期望没有人会导入由测试可执行包提供的模块,并且那里的模块是它们依赖关系图的“叶子”。只要这是真的,就很难想象孤儿实例会导致最坏情况的场景:类似于误报,由于孤儿实例而测试通过,而实际上它应该失败。这不是一个二元决策,但我认为这里的成本效益分析与将测试库作为依赖项包括在内。

于 2016-08-10T14:38:03.387 回答