java - 使用 JMockit 中的现有类模拟类(替换 `redefineMethods` )

标签 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()以类似的方式。

最佳答案

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

关于java - 使用 JMockit 中的现有类模拟类(替换 `redefineMethods` ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28175202/

相关文章:

java - 选择复选框或单选按钮

java - 使用java客户端ckan上传

javascript - 不理解如何从数组加载类属性

c# - 模拟参数的属性更改 - 使用 Moq

unit-testing - 如何在没有这么多模拟的情况下编写测试?

java - 自定义 Horizo​​ntalScrollView 中的按钮

java - Scanner.nextInt() block

c++ - 设置两个函数相等

C++构造函数调用另一个构造函数

javascript - 如何使用 sinon.stub() 仅对某个调用进行 stub