QuickCheck catch-22

时间:2011-06-05 04:15:06

标签: testing haskell

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

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

问题在于限制blah.hs导出的功能意味着限制可以从blah_test.hs测试的功能。这个问题有好办法吗?因为我真的想为blah.hs未导出的某些“内部”函数编写测试代码。

谢谢, 利

2 个答案:

答案 0 :(得分:18)

将内部函数从Blah.*模块移至Blah.Internal.*。您可以将库中的内部模块隐藏在other-modules文件的blah.cabal字段中(而不是exposed-modules,其中列出了用户可见的所有模块)。请查看Hakyll.cabal file作为示例。

答案 1 :(得分:8)

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

module Blah
    ( public
#if TEST
    , private
#endif
    ) where