模拟Clojure协议

Ral*_*lph 5 easymock clojure mocking mockito

可以使用像EasyMockMockito这样流行的Java 模拟框架来模拟用Clojure协议定义defprotocol吗?如果是这样,怎么样?

Stu*_*way 9

您应该能够使用任何模拟库来模拟协议.在幕后,每个协议都使用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)

请注意,您无需存根不打算调用的方法.