在Clojure代码库中,我定义了几个协议和几个缺陷记录。我正在使用clojure.test来测试在我的缺陷记录中定义的具体功能。
例如,假设我有以下源文件:
在src/foo/protocols.clj s.clj中:
(ns foo.protocols)
(defprotocol RequestAcceptability
(desired-accepted-charset [this]))在src/foo/types.clj.foo中:
(ns foo.types
(:use [foo.protocols :only [RequestAcceptability desired-accepted-charset]])
(defrecord RequestProcessor
[field-1 field-2]
RequestAcceptability
(desired-accepted-charset [this]
...implementation here...))在test/foo/type_test.clj中:
(ns foo.types-test
(:use [clojure.test])
(:use [foo.protocols :only [RequestAcceptability desired-accepted-charset]])
(:import [foo.types RequestProcessor]))
(deftest test-desired-accepted-charset_1
...test code here...)我在Emacs中使用Clojure 1.4,Leiningen 2,nrepl。
我面临的麻烦是,当我去运行我的单元测试(例如,使用C,序列)时,我得到了一个ClassNotFoundException: foo.types.RequestProcessor。为了解决这个问题,我正在做手工工作,分别评估我的每一个协议和缺陷记录表格。也就是说,我将导航到我的protocols.clj并评估我的types.clj表单(nrepl的C键序列);然后我将导航到我的types.clj并评估我的defrecord表单;然后我能够成功地运行我的单元测试w/出得到的ClassNotFoundException。
当然,在我真正的代码库中,我必须对我的所有协议和错误记录这样做,所以这是非常繁琐和耗时的。另外,如果我简单地跳到一个shell并执行lein测试,我就会得到相同的ClassNotFoundException。
有更好的办法吗?
谢谢你的时间和帮助。
发布于 2013-01-17 10:04:36
您需要在测试名称空间中包含require的名称空间。
(:import [foo.types RequestProcessor]))不会自己工作,因为它只适用于类路径上已经存在的类。这里的情况不是这样的,因为在运行时使用defrecord动态创建类。
Java通常只需要import。
https://stackoverflow.com/questions/14363216
复制相似问题