QuickCheck catch-22

LOS*_*LOS 12 testing haskell

我正在开发一个Haskell项目,我开始通过这样组织它:

  • blah.hs 拥有大部分代码
  • blah_main.hs 有主程序
  • blah_test.hs有测试用例.

这样做的问题是通过blah.hs限制可以测试的功能来限制导出的功能blah_test.hs.这个问题有好办法吗?因为我真的想为某些未被导出的"内部"函数编写测试代码blah.hs.

谢谢,李

Mik*_*kov 18

将内部功能从Blah.*模块移动到Blah.Internal.*.您可以通过在库中的other-modules字段中列出内部模块来隐藏库中用户的内部模块blah.cabal(而不是exposed-modules列出用户可见的所有模块).以Hakyll.cabal文件为例.

  • 我同意将函数移动到`Blah.Internal.*`,但请不要隐藏模块.用户需要比预期更频繁地访问模块内部,例如创建新类的数据类型实例,或实现优化/严格/非严格变体,或许多其他充分理由.将模块命名为Internal,但保持暴露,除非绝对必要,否则用户将不会理会它. (6认同)

Mic*_*man 8

我同意米哈伊尔的观点,但在某些情况下,实际上并不可能做出这样的分歧.在这些情况下,我建议使用CPP(C预处理器)扩展,类似于:

module Blah
    ( public
#if TEST
    , private
#endif
    ) where
Run Code Online (Sandbox Code Playgroud)