2014-10-29 97 views
5

我有一個模塊,我正在寫單元測試用於運行travis.ci。如何爲未導出的函數編寫單元測試?

在我的模塊中,我對Web服務執行HTTP POST操作。

我的內部唯一函數之一validate_http_response()是我創建的用於封裝Web服務調用的函數的一部分,所以我想測試它。但是,因爲沒有這樣的export validate_http_response的功能不能「看到」我的測試腳本,我得到的錯誤:

validate_http_response not defined 

我應該如何架構我的測試,這樣我就不必複製將內部函數粘貼到測試本身(有幾個)?我想阻止必須同時維護srctest腳本。



編輯隨着接受的答案我也發現我可以做以下的測試腳本的開頭:include("../src/myfunctions.jl"),正如我在src每個文件單獨測試腳本。

回答

8

再次檢查模塊上的documentation以更好地瞭解命名空間的工作原理。在Julia中沒有強制可見性,因此您可以通過完全限定引用來訪問任何模塊中的函數,導出或未導出。所以在你的情況下,如果你的模塊被命名爲HTTP,你可以說HTTP.validate_http_response訪問你未導出的函數來測試。

+1

完全限定參考絕對是朱利安方式來處理這個問題。 – IainDunning 2014-10-29 14:04:42

+0

作品。我發現它最後更容易做到:'include(「../ src/myfunctions.jl」)'所以我不必一直引用它。懶惰的輸入。 – 2014-10-30 10:12:49

0

有兩種soltutions:

  1. 導出功能。
  2. 創建一個包含HTTP請求驗證碼的新模塊。在那裏移動功能。現在它是官方/公共API的一部分,可以獨立測試。

第一個解決方案很簡單,但會污染您的API。第二個是乾淨的,但可能很多工作。

相關問題