Mocking Clojure协议 [英] Mocking Clojure protocols
问题描述
可以使用流行的Java模拟框架之一,例如 EasyMock 或 Mockito 用于模拟用 defprotocol
定义的Clojure协议?如果是,如何?
Can one of the popular Java mocking frameworks like EasyMock or Mockito be used to mock Clojure protocols defined with defprotocol
? If so, how?
推荐答案
您应该能够使用任何模拟库模拟协议。在封面下,每个协议使用Java接口作为实现细节,你可以只是模拟该接口。
You should be able to mock protocols using any mock library. Under the covers, every protocol uses a Java interface as an implementation detail, and you could just mock that interface.
也就是说,不要这样做!在Java中嘲笑是荒谬复杂的,因为反射,保护级别,最终类等。任何时候,你想要一个实现协议的Clojure对象,只需调用 reify ,例如
That said, don't do this! Mocking in Java is absurdly complex because of reflection, protection levels, final classes, etc. Any time you want a Clojure object that implements a protocol, simply call reify, e.g.
(defprotocol Foo (method-a [_]) (method-b [_]))
-> Foo
(let [stub (reify Foo (method-a [_] :stubbed))]
(method-a stub))
-> :stubbed
请注意,您不需要存根您不打算调用的方法。
Note that you need not stub the methods you don't plan to call.
这篇关于Mocking Clojure协议的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!