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