我试图终止RabbitMQ交互,因为这些交互并不是我正在编写的应用程序的主要目的。

因此,我尝试在测试中重新绑定(bind)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

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

我已经测试了其他方案,并且已成功使用上述代码结构对cheshire(json解析clojure lib)函数进行了 stub 。
我很谦虚地请求帮助,以了解为什么我的langohr stub 不起作用,以及有关如何以一种优雅的方式实现此目的的提示。

最佳答案

之所以会发生ClassCastException,是因为langohr.basic/ack是一个接受原始参数的函数-具体来说,它的类型为clojure.lang.IFn $ OLO,其中OLO表示“对象,长对象”。

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

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

关于clojure - 如何在Clojure中添加Langohr RabbitMQ交互?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14461646/

10-10 00:34