6

私が書いているアプリケーションの主な目的ではないので、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 parsing clojure lib) 関数のスタブ化に成功しました。私のランゴールスタブが機能しない理由を理解し、エレガントな方法でこれを行う方法についてのヒントを求めて、謙虚に支援を求めます。

4

1 に答える 1

6

ClassCastException が発生するのは、langohr.basic/ack がプリミティブ引数を取る関数であるためです。具体的には、この関数は clojure.lang.IFn$OLO 型であり、OLO は「オブジェクト、ロング、オブジェクト」を表します。

同じタイプであることを再定義する必要があります。これを試して:

(with-redefs [langohr.basic/ack (fn [a1 ^long a2] true)] ...)
于 2013-01-23T00:42:35.400 に答える