2011-12-08 58 views
2

我正在爲OCaml模塊編寫測試。模塊中的一些功能並不是公開可見的,所以它們不包含在簽名(.mli文件)中。OCaml - 簽名中未包含測試功能

我無法從我的測試中調用這些函數,因爲它們在模塊外部不可見。所以我很難測試它們。有沒有一種好方法來解決這個問題?例如,告訴ocamlc在編譯測試時不要從.mli文件讀取簽名?

回答

4

一些想法:

  • 其實導出測試功能,但使用ocamldoc的停止註釋(**/**)功能,以避免顯示的出口文檔。
  • 把所有的測試完全放在另一個模塊中。然而,如果你有抽象類型,這很難,因爲你的測試很可能需要訪問內部實現。
  • 創建一個子模塊測試,在這裏進行所有測試。這樣就明確了哪些功能僅用於測試。可能將其與(**/**)功能組合在一起,以隱藏文檔中的子模塊。
+0

現在我正在與你的第一個建議。看起來像最簡單的解決方案。 – declan

1

我聽說人們有時會將他們的.mli文件與他們的.ml文件(在不同的目錄中)分開,以便他們可以編譯或不編譯它們(通過告訴ocamlc查看單獨的目錄)。我只是嘗試了一些實驗。我認爲它可以工作,但似乎有點容易出錯。也許你可以把內部函數的測試放入模塊中。導出測試函數可能不會嚴重違反模塊化。 (當然它雜波了模塊。)

+0

我試着將.mli文件放入另一個目錄。這似乎工作得很好,但最終我認爲我會用Ashish的建議使用停止評論'(**/**)',因爲這樣做有點簡單。 +1雖然,好建議。 – declan