Java jmock模拟静态方法

Java jmock模拟静态方法,java,mocking,jmock,Java,Mocking,Jmock,我的代码中有一个静态方法,我想以某种方式模拟它 我正在使用jmock 我想我可以这样做的一种方法是在静态方法和 嘲笑这一点,但我希望有更好的解决办法 我走错方向了吗 反馈: 我将有一个接口和类,它有一个方法,只调用静态方法。它允许我通过模拟对这个包装器类的调用来模拟逻辑。(我甚至在谈论它的时候都觉得很脏:)是EasyMock的一个扩展,它允许模拟静态方法。我们不支持在jMock中模拟静态方法,因为它不适合我们的设计方法。对于可能影响系统状态的重要特性,我们不希望使用静态方法。我们倾向于使用它们只

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

我正在使用jmock

我想我可以这样做的一种方法是在静态方法和 嘲笑这一点,但我希望有更好的解决办法

我走错方向了吗

反馈:


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

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

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

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

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

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


    List<Person> peopleAboveAge = 
        find("select p from Person p where p.age >= ?", age);

列出年龄以上的人员=
查找(“从人员p中选择p,其中p.age>=?”,年龄);
其中,
find
方法是从只定义静态方法的
PersistenceFacade
类静态导入的,该类封装了如何获取适当的会话/EntityManager实例。此解决方案对单元测试友好且灵活。我使用Hibernate在一个拥有500多个持久实体的业务应用程序中使用了它。当我们从Hibernate 2迁移到Hibernate 3时,当我们从Oracle迁移到Sybase然后再返回到Oracle时,当我们开始使用JPA注释而不是“hbm.xml”文件进行ORM映射时,静态外观起到了帮助作用。

请参阅相关问题。