如何在clojure中存储langohr RabbitMQ交互?

时间:2013-01-22 15:06:04

标签: clojure rabbitmq langohr

我正在尝试将RabbitMQ交互存根,因为那些并不是我正在撰写的应用程序的主要目的。

所以,我尝试在我的测试中重新绑定langohr函数,如下所示:

(defn stub [ch]
  (langohr.basic/ack ch 1))

(deftest test-stub
  (with-redefs [langohr.basic/ack (fn [a1 a2] true)]
    (is (= true (stub "dummy")))))

当我使用lein test运行测试时,我得到了

java.lang.ClassCastException:
redwood.env_test$fn__2210$fn__2211 cannot be cast to clojure.lang.IFn$OLO

我一直在尝试其他几种方法,包括不同的测试框架来重新定义或重新绑定langohr lib函数而没有任何进展。

我已经测试了其他场景,并且我已经使用上面的代码结构成功地将cheshire(json解析clojure lib)函数存根。 我谦卑地请求帮助,理解为什么我的langohr存根不起作用,以及如何以优雅的方式做到这一点的提示。

1 个答案:

答案 0 :(得分:6)

发生ClassCastException是因为langohr.basic / ack是一个接受原始参数的函数 - 具体来说,它的类型为clojure.lang.IFn $ OLO,其中OLO代表“object,long,object”。

您必须将其重新定义为相同类型。试试这个:

(with-redefs [langohr.basic/ack (fn [a1 ^long a2] true)] ...)