[英]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.