2016-12-10 126 views
5

在Clojure中構建集成和單元測試的典型方法是什麼? 到目前爲止,我有一個test/文件夾,它遵循我的src/目錄的結構。但我想將它們分解爲單元測試和集成測試。Clojure - 集成測試組織

有沒有推薦的策略?測試中的註釋?子文件夾test/unittest/integration?環境變量?

注:我的情況下,使用boot而不是leiningen它的事項

回答

6

該組織是由你。您可以爲集成測試創建單獨的目錄樹,將單獨的文件放在同一目錄樹中,或者在同一個測試源文件中進行單元測試和集成測試。

單元&集成測試之間的唯一真正的區別是

  1. 他們需要多長時間才能與系統的其他部分運行
  2. 額外的設置(這也意味着他們是慢和/或更難跑)。

所以,無論哪種方式,所有的集成測試應該在每個功能^:integration元數據標記。這種技術對於「慢」單元測試也很有用。

「慢」 的測試可以打上這樣一個(使用clojure.test.check生成測試):

(tst/defspec ^:slow round-trip-bytes 9999 
    (prop/for-all [orig gen/bytes] 
    (let [string-b64 (b64/encode-bytes->str orig) 
      result  (b64/decode-str->bytes string-b64) ] 
     (assert (every? b64/base64-chars (seq string-b64))) 
     (assert (types/byte-array? result)) 
     (= (seq orig) (seq result))))) 

然後你project.clj(無法開機,我知道),規定:

:test-selectors { :default (complement :slow) 
        :slow  :slow } 

然後當您說lein run時,標記爲^:slow的測試將被跳過,並且當您說lein run :all時,將運行所有測試(包括「慢」測試)。

請注意,關鍵字:slow沒有什麼特別之處。您可以替換您希望的任何關鍵字,例如:integration

我還沒有使用boot很多,但我認爲有類似的技術可用。

+0

據我所知,這不是在啓動時存在的東西,但我喜歡這個想法。 – nha