バックグラウンド
私はClojureを初めて使用するので、明白なエラーはご容赦ください。redis-clojureライブラリを使用するClojureデータアクセスコードをテストしようとしています。もちろん、統合テストではフルスタックをテストしますが、単体テストをRedisサーバーインスタンスへの接続に依存させたくありません。Midjeを使用して実際のRedisコマンドをモックするのは比較的簡単なようですが、接続マクロの処理はより困難です。
必要な提案
Midjeのドキュメントではできない、または見つけられないのは、redis接続をモックする方法またはマクロを再定義する方法です。core.cljの関連するトップレベルの接続マクロは次のとおりです。
(defmacro with-server
"Evaluates body in the context of a connection to Redis server
specified by server-spec.
server-spec is a map with any of the following keys:
:host (\"127.0.0.1\")
:port (6379)
:db (0)
:timeout (5000)
:password (nil)"
([server-spec & body]
`(with-connection connection# *pool* ~server-spec
(binding [redis.vars/*channel* (make-direct-channel connection#)]
~@body))))
テストコードでマクロを再定義できないようです。結果を生成するには本体を実行する必要があるため、マクロを関数でラップしても、それ以上先に進むことはできません。私が理想的にやりたいのは、接続マクロに渡された本体を実行し、残りのマクロを破棄することです。何か案は?