如何使用jMockit模拟标记为final的类并使用私有构造函数

时间:2015-02-04 08:53:51

标签: java unit-testing jmockit

我想使用JMockit编写一些基于状态的测试来模拟CSVRecord。问题是CSVRecordfinal(这意味着我必须使用像JMockit这样的模拟框架)和CSVRecord's构造函数具有包私有可见性。

由于它是包私有的,我无法调用新的CSVRecord(arg, arg, ...),这意味着我永远无法实例化我的模拟。  其父级CSVParser是唯一可以创建实例的类。

JMockit是否有办法处理这种情况?

注意:JMockitMockito是我们在此项目中使用的唯一框架。没有其他框架可以接受。我的偏好是使用MockUp。

3 个答案:

答案 0 :(得分:0)

如果只是调用私有构造函数,那么是的,JMockit有工具来处理它。请参阅tutorial

答案 1 :(得分:0)

听起来更像CSVRecord不适合嘲笑。如果可能的话,针对在内部使用它的另一个公共类的测试将是更可取的。

否则,JMockit提供DeencapsulationnewInstance方法。

作为旁注,Mockito仅支持基于行为的测试; JMockit提供"模拟" (MockUp),但它与编写基于状态的纯黑盒测试不同。

答案 2 :(得分:-1)

使用:

ConstructorReflection.newInstance

在新版本的Jmockit中。