2013-09-01 17 views
0

考慮以下leiningen項目core.clj文件在Clojure單元測試中引用defrecord符號時遇到問題?

(ns records.core) 

(defn hello [] "hello") 

(defprotocol my-sequence 
    (add [seqq item])) 

(defrecord my-vector [coll] 
    my-sequence 
    (add [_ item] (conj coll item))) 

我可以編譯這一點,並在REPL測試如下:

records.core> (hello) 
"hello" 
records.core> (add (my-vector. []) 42) 
[42] 

但是,當我抄寫到leiningen單元測試文件,具體步驟如下:

(ns records.core-test 
    (:require [clojure.test :refer :all] 
      [records.core :refer :all])) 

(deftest a-test 
    (testing "adding to a my-vector" 
    (is (= (hello) "hello")) 
    #_(is (= [42] (add (my-vector. []) 42))))) 

第一次測試成功,顯示符號hello已正確移入records.core-test命名空間,但my-vector測試拋出一個編譯器錯誤(在第二行刪除#_以上):

clojure.lang.Compiler$CompilerException: java.lang.IllegalArgumentException: 
Unable to resolve classname: my-vector, compiling: 
(.../records/test/records/core_test.clj:8:22) 

這似乎並沒有成爲this SO question重複,因爲我使用requirerefer,作爲回答這個問題的建議。

編輯:下面也沒有幫助

(add (records.core/my-vector. []) 42) 
(add (#'records.core/my-vector. []) 42) 
(add (@#'records.core/my-vector. []) 42) 

回答

1

除非我defrecord技能生鏽,你應該首先需要的命名空間,然後導入defrecord。

(:require records.core) 
(:import [records.core my-vector]) 
+5

他還可以使用生成的構造函數,' - >我-VECTOR',將被納入由需要/參考。 – amalloy

+1

哦,不知道!謝謝 :) – Chiron