2010-05-21 69 views
4

下面的測試失敗:從動態創建的命名空間尋找瓦爾Clojure中

(ns clojure_refactoring.rename-fn-test 
    (:use clojure.test)) 

(deftest test-fn-location 
    (in-ns 'refactoring-test-fn-rename) 
    (clojure.core/refer-clojure) 
    (defn a [b] (inc b)) 
    (in-ns 'clojure_refactoring.rename-fn-test) 
    (is (not= (find-var 'refactoring-test-fn-rename/a) 
     nil)) 
    (remove-ns 'refactoring-test-fn-rename)) 

也就是說,找到-VAR(一個VAR的我剛剛創建,命名空間中的我剛剛創建)返回nil 。此行爲不會發生在repl,其中輸入測試的步驟工作得很好。

我做錯了什麼,或者這只是在clojure現在不工作的東西?

回答

1

更新的版本,似乎真的做預期的事,相反,我原來的答覆...

這個版本似乎工作:

(ns clojure-refactoring.rename-fn-test 
    (:use clojure.test 
     [clojure.contrib.with-ns :only [with-ns]])) 

(deftest test-fn-location 
    (create-ns 'refactoring-test-fn-rename) 
    (with-ns 'refactoring-test-fn-rename 
    (clojure.core/refer-clojure) 
    (defn a [b] (inc b))) 
    (is (not= (find-var 'refactoring-test-fn-rename/a) 
     nil)) 
    (remove-ns 'refactoring-test-fn-rename)) 

而且,你真正需要的將名稱空間名稱中所有出現的_更改爲-,反之則更改文件名。

隨着這些變化的到位,測試運行良好。 ( 我甚至沒有試圖運行它 顯然它仍然有效,但沒有做出_/-的更改,但實際上,您需要這樣做!這是公認的約定,如果您不遵守它)。

出於某種原因,來自該問題的代碼似乎一直在測試名稱空間中創建Var a,因此(find-var 'clojure-refactoring.rename-fn-test/a)返回Var,而測試失敗。如上所述,(find-var 'clojure-refactoring.rename-fn-test/a)返回nil,如預期。

+0

_/- 事情不是一個慣例而是一個規則...... – kotarak 2010-05-21 11:31:53