在JMockit中使用现有类模拟类(替换`redefineMethods`)

时间:2015-01-27 16:26:43

标签: java class mocking jmockit

我有两个类作为输入,想要用另一个模拟一个。以前在JMockit中非常简单,一个叫做

Mockit.redefineMethods(originalClass, mockingClass);

但是在0.999版本中,这个已弃用的方法已被删除。我需要更新版本的JMockit的功能,所以我不能再使用旧版本了。

我想从弃用消息中的文档中可以看出,使用建议的“现代”方法来定义MockUp<originalClass>并将其用作mockingClass

不幸的是,我在运行时将这两个值作为输入参数(声明为class<?>),因此创建类不是一个选项。

有没有办法模仿Mockit.redefineMethods()在版本0.999之前所做的事情,即使它可能不是解决此问题的最优雅解决方案?

修改

我得到的输入是一个Map<Class<?>, Class<?>> mockedClasses个类,用于模拟指向模拟它们的类。然后迭代这些并传递给Mockit

for (Map.Entry<Class<?>, Class<?>> entry : mockedClasses.entrySet()) {
  Mockit.redefineMethods(entry.getKey(), entry.getValue());
}

之后,执行测试代码,然后以类似的方式使用restoreOriginalDefinition()而不是redefineMethods()再次禁用模拟。

1 个答案:

答案 0 :(得分:1)

好的,问题现在更清楚了。答案是没有办法用另一个任意类来模拟一个类;你必须将模型类定义为MockUp的子类。非常古老的Mockit.redefineMethods(Class, Class)(从API 4.5+年前删除)只接受任意类,因为该初始API还支持Java 1.4测试代码(自0.999以来不再支持,这需要泛型和/或注释)