功能的隐私和单元测试哈斯克尔(Function privacy and unit testing H

2019-07-18 07:49发布

你如何处理与功能的知名度和单元测试在Haskell?

如果你在一个模块中导出的每个功能,使单元测试访问它们,你就有可能其他人通话功能,不应该是公共的API中。

我想用的{-# LANGUAGE CPP #-} ,然后围绕与出口#ifdef

{-# LANGUAGE CPP #-}

module SomeModule
#ifndef TESTING
( export1
, export2
)
#endif
where

有没有更好的办法?

Answer 1:

通常的惯例是你的模块分成公共和私人部分,即

module SomeModule.Internal where

-- ... exports all private methods

然后公共API

module SomeModule where (export1, export2)

import SomeModule.Internal

然后,你可以导入SomeModule.Internal在测试中和其他地方的关键以访问内部实现。

这个想法是,你的图书馆的用户永远不小心调用私有API,但可以用它,如果知道他们在做什么(调试等)。 这大大增加了你的可用性库相比,强行隐藏私有API。



Answer 2:

为了测试你通常分裂的应用小集团项目文件,出库,生产可执行文件,并且之间的测试套件 ,测试库函数的可执行文件,所以测试断言功能是保持分开。

对于外部函数的知名度拆分“其他模块”部分“暴露模块”部分之间的库模块。



文章来源: Function privacy and unit testing Haskell