Mocking Clojure协议 [英] Mocking Clojure protocols

查看:136
本文介绍了Mocking Clojure协议的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可以使用流行的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆