背景
我是 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))))
我似乎无法在我的测试代码中重新定义宏,并且将宏包装在一个函数中不会让我进一步前进,因为我仍然需要执行主体来产生我的结果。我最想做的是执行传递给连接宏的主体并丢弃宏的其余部分。有任何想法吗?