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重複,因爲我使用require
和refer
,作爲回答這個問題的建議。
編輯:下面也沒有幫助
(add (records.core/my-vector. []) 42)
(add (#'records.core/my-vector. []) 42)
(add (@#'records.core/my-vector. []) 42)
他還可以使用生成的構造函數,' - >我-VECTOR',將被納入由需要/參考。 – amalloy
哦,不知道!謝謝 :) – Chiron