[英]Function privacy and unit testing Haskell
你如何处理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相比,这大大增加了库的可用性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.