你如何处理与功能的知名度和单元测试在Haskell?
如果你在一个模块中导出的每个功能,使单元测试访问它们,你就有可能其他人通话功能,不应该是公共的API中。
我想用的{-# LANGUAGE CPP #-}
,然后围绕与出口#ifdef
:
{-# LANGUAGE CPP #-}
module SomeModule
#ifndef TESTING
( export1
, export2
)
#endif
where
有没有更好的办法?
你如何处理与功能的知名度和单元测试在Haskell?
如果你在一个模块中导出的每个功能,使单元测试访问它们,你就有可能其他人通话功能,不应该是公共的API中。
我想用的{-# LANGUAGE CPP #-}
,然后围绕与出口#ifdef
:
{-# LANGUAGE CPP #-}
module SomeModule
#ifndef TESTING
( export1
, export2
)
#endif
where
有没有更好的办法?
通常的惯例是你的模块分成公共和私人部分,即
module SomeModule.Internal where
-- ... exports all private methods
然后公共API
module SomeModule where (export1, export2)
import SomeModule.Internal
然后,你可以导入SomeModule.Internal
在测试中和其他地方的关键以访问内部实现。
这个想法是,你的图书馆的用户永远不小心调用私有API,但可以用它,如果知道他们在做什么(调试等)。 这大大增加了你的可用性库相比,强行隐藏私有API。
为了测试你通常分裂的应用小集团项目文件,出库,生产可执行文件,并且之间的测试套件 ,测试库函数的可执行文件,所以测试断言功能是保持分开。
对于外部函数的知名度拆分“其他模块”部分“暴露模块”部分之间的库模块。