jmock模拟静态方法

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

我正在使用jmock。

我认为我可以这样做的一种方法是在静态方法周围使用“包装类”并模拟这个,但我希望有更好的解决方案。

我这是错误的方式吗?

反馈:

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

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

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

在设计其他OO解决方案时,我没有看到明智地使用静态方法的任何问题。

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

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

find方法是从定义静态方法的PersistenceFacade类中静态导入的,并封装了如何获取正确的Session / EntityManager实例。 该解决方案是unit testing友好且灵活的。 我使用Hibernate在具有500多个持久性实体的业务应用程序中使用它。 当我们从Hibernate 2迁移到Hibernate 3时,静态外观有助于我们从Oracle迁移到Sybase然后再迁移到Oracle,以及当我们开始使用JPA注释而不是“hbm.xml”文件进行ORM映射时。

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