首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免在Clojure中进行单元测试时手动评估缺陷记录和缺陷协议?

如何避免在Clojure中进行单元测试时手动评估缺陷记录和缺陷协议?
EN

Stack Overflow用户
提问于 2013-01-16 16:36:08
回答 1查看 427关注 0票数 5

在Clojure代码库中,我定义了几个协议和几个缺陷记录。我正在使用clojure.test来测试在我的缺陷记录中定义的具体功能。

例如,假设我有以下源文件:

在src/foo/protocols.clj s.clj中:

代码语言:javascript
复制
(ns foo.protocols)

(defprotocol RequestAcceptability
  (desired-accepted-charset [this]))

在src/foo/types.clj.foo中:

代码语言:javascript
复制
(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中:

代码语言:javascript
复制
(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。

有更好的办法吗?

谢谢你的时间和帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-17 10:04:36

您需要在测试名称空间中包含require的名称空间。

(:import [foo.types RequestProcessor]))不会自己工作,因为它只适用于类路径上已经存在的类。这里的情况不是这样的,因为在运行时使用defrecord动态创建类。

Java通常只需要import

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14363216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档