你如何处理 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,但是他们can如果知道他们在做什么(调试等),请使用它。与强制隐藏私有 API 相比,这极大地提高了库的可用性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)