Ral*_*lph 43 haskell unit-testing private-methods
你如何处理Haskell中的函数可见性和单元测试?
如果导出模块中的每个函数以便单元测试可以访问它们,则可能会冒其他人调用不应该在公共API中的函数.
我想到使用{-# LANGUAGE CPP #-}然后用以下方法包围出口#ifdef:
{-# LANGUAGE CPP #-}
module SomeModule
#ifndef TESTING
( export1
, export2
)
#endif
where
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
sha*_*ang 66
通常的惯例是将您的模块拆分为公共和私有部分,即
module SomeModule.Internal where
-- ... exports all private methods
Run Code Online (Sandbox Code Playgroud)
然后是公共API
module SomeModule where (export1, export2)
import SomeModule.Internal
Run Code Online (Sandbox Code Playgroud)
然后,您可以导入SomeModule.Internal测试和其他对于访问内部实现至关重要的地方.
我们的想法是,您的库的用户永远不会意外地调用私有API,但如果知道他们正在做什么(调试等),他们可以使用它.与强制隐藏私有API相比,这大大增加了库的可用性.