您应该能够使用任何模拟库来模拟协议.在幕后,每个协议都使用Java接口作为实现细节,您可以只是模拟该接口.
那说,不要这样做!由于反射,保护级别,最终类等等,在Java中进行模拟是非常复杂的.只要你想要一个实现协议的Clojure对象,只需调用reify,例如
(defprotocol Foo (method-a [_]) (method-b [_]))
-> Foo
(let [stub (reify Foo (method-a [_] :stubbed))]
(method-a stub))
-> :stubbed
Run Code Online (Sandbox Code Playgroud)
请注意,您无需存根不打算调用的方法.