2013-09-28 67 views
1

用Midje進行單元測試是一個很棒的體驗,但現在我需要測試一些與filessytem交互的代碼。具體來說,代碼從本地目錄佈局構建數據結構表示。測試文件系統代碼

想到的是在/ tmp中創建目錄和文件,然後在測試之後必須清理它們。我可能可以使它工作,但如果有一個正確的方法來做它會好得多。

在Clojure或更普遍的情況下,測試文件系統代碼的首選方法是什麼?

回答

1

我不確定是否有特定的東西可以幫助您使用文件系統的東西,但安裝和拆卸可以使用backgroundagainst-background(如果您需要詞法範圍界定)來執行。

的總體思路是類似於其他語言的安裝/拆卸,你會做這樣的事情:

(require '[clojure.java.io :as io]) 

(background (before :facts (io/make-parents "parent/child/file") 
      :after :facts (map io/delete-file (reverse (file-seq (io/file "parent"))) 

(facts "About something or other 
    ...) 

你的事實之前,這將創建parentchild目錄(而不是文件 - 你如果你還需要文件,可以添加spit或其他內容)。然後你的事實後:

  • 遞歸得到的parent目錄的內容列表(使用file-seq
  • reverse的IT(因爲我們只能刪除空的東西,所以必須在的底部開始目錄樹)
  • 應用delete-file功能,每個目錄樹中的

的代碼有創建和刪除文件可能不是最好的(我是新來的!),但設置方法和拆除Midje測試中的東西是合理的。

注意事項:

  • 使用這種方法時一定要小心,在你的樹的符號鏈接,你可以陷入一個循環。
  • 使用:after語法而不是使用(after)宏可以確保即使測試引發異常也會發生拆卸。
  • 您可以在單個命名空間中的事實子集之後執行setup/teardown,方法是將它們與(against-background)一起包裝,然後執行相同的操作。

參考文獻:

https://github.com/marick/Midje/wiki/Setup,-Teardown,-and-State https://github.com/marick/Midje/wiki/Background-prerequisites