簡體   English   中英

功能隱私和單元測試Haskell

[英]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相比,這大大增加了庫的可用性。

對於測試,您通常將應用程序拆分在cabal項目文件中,庫,生產可執行文件和測試庫函數的測試套件可執行文件之間,因此測試斷言功能保持分開。

對於外部功能可見性,您可以在“exposed-modules”部分和“other-modules”部分之間拆分庫模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM