使用 groovy 中的私有构造函数将闭包映射转换为对象
我正在使用 groovy 为测试用例创建一些模拟类。我基本上是在创建虚拟对象,其中所有方法都返回 null,以便我可以运行我的测试用例。
我使用以下语法:
MessageFactory.instance = ["getMessage": {a,b,c,d -> "dummy"}] as MessageFactory
所以在这里我尝试用我的假工厂对象覆盖单例实例。 问题在于 MessageFactory 的构造函数恰好是私有方法。当我运行上面的代码时,这给了我一个非法访问异常。我是否可以在 groovy 中创建代理并克服私有构造函数问题?
I am using groovy to create some mock classes for a test case. I am basically creating dummy objects where all the methods return null so that i can run my testcase.
I am using the following syntax:
MessageFactory.instance = ["getMessage": {a,b,c,d -> "dummy"}] as MessageFactory
So here i am trying to overwrite the singleton instance with my on fake factory object. The problem is that MessageFactory's constructor happens to be a private method. This gives me an illigal access exception when i run the code above. Is there a away i can create a proxy in groovy and overcome the private constructor issue?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您有权访问 MessageFactory 并且愿意修改它,那么您可以使用标准依赖项注入解决方案,如下所示:模拟单例
..虽然它不是特别Groovy。
否则,我发现的最好的解决方法是重写单例实例本身的方法,如下所示:
当然,作为单例,此实例不会改变(至少在理论上)...所以,重写这种方式的方法实际上是全球性的。
编辑:或者您可以使用GMock,它支持构造函数模拟(除其他外)。
If you have access to the MessageFactory, and are willing to modify it, then you use the standard dependency-injection solution, as detailed here: mock singleton
..Though it's not particularly Groovy.
Otherwise, the best workaround I've found is to override the method(s) on the singleton instance itself, like so:
Naturally, as a singleton, this instance doesn't change (at least in theory)... So, overriding methods in this manner is effectively global.
Edit: Or you can use GMock, which supports constructor mocking (among other things).