首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jmock模拟静态方法

jmock模拟静态方法
EN

Stack Overflow用户
提问于 2008-10-20 15:26:04
回答 3查看 17.5K关注 0票数 11

我的代码中有一个静态方法,我想以某种方式模拟它。

我正在使用jmock。

我想我可以做到这一点的一种方法是在静态方法周围使用"wrapper class“并模拟这个方法,但我希望有一个更好的解决方案。

我走错路了吗?

反馈:

我将有一个接口和类,其中包含一个调用静态方法的方法。它允许我通过模拟对这个包装器类的调用来模拟逻辑。(我甚至在谈论它时都觉得很脏:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-21 12:51:20

我们不支持在jMock中模拟静态方法,因为它不适合我们的设计方法。我们不喜欢对可能影响系统状态的重要功能使用静态方法。我们倾向于使用它们来支持OO代码,并使其更具可读性。这就是为什么我们把模仿静态方法看作是有问题的提示。一个例外是它在第三方库中,但我们可能会将其包装在更面向对象的东西中。

票数 8
EN

Stack Overflow用户

发布于 2009-06-27 17:35:50

JMockit是另一个允许模拟静态方法(以及最终方法、构造函数等)的工具包。

在设计其他面向对象的解决方案时,我不认为明智地使用静态方法有任何问题。

例如,我喜欢使用的一种模式/习惯用法是静态外观,特别是为业务应用程序中的持久性子系统提供更简单、更容易使用的API。在我看来,没有比下面这样的解决方案更优雅的了:

代码语言:javascript
复制
    List<Person> peopleAboveAge = 
        find("select p from Person p where p.age >= ?", age);

其中find方法是从PersistenceFacade类静态导入的,该类只定义静态方法,并封装了如何获得正确的会话/实体管理器实例。该解决方案对单元测试友好且灵活。我使用Hibernate在一个具有500+持久化实体的业务应用程序中使用它。当我们从Hibernate 2迁移到Hibernate 3时,当我们从Oracle迁移到Sybase然后再迁移回Oracle时,当我们开始使用JPA注解而不是"hbm.xml“文件进行ORM映射时,静态facade起到了帮助作用。

票数 5
EN

Stack Overflow用户

发布于 2008-11-04 03:53:16

Powermock是EasyMock的一个扩展,允许模拟静态方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/218813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档