我想使用JMockit
编写一些基于状态的测试来模拟CSVRecord。问题是CSVRecord
是final
(这意味着我必须使用像JMockit
这样的模拟框架)和CSVRecord's
构造函数具有包私有可见性。
由于它是包私有的,我无法调用新的CSVRecord(arg, arg, ...)
,这意味着我永远无法实例化我的模拟。
其父级CSVParser是唯一可以创建实例的类。
JMockit
是否有办法处理这种情况?
注意:JMockit
或Mockito
是我们在此项目中使用的唯一框架。没有其他框架可以接受。我的偏好是使用MockUp。
答案 0 :(得分:0)
如果只是调用私有构造函数,那么是的,JMockit有工具来处理它。请参阅tutorial
答案 1 :(得分:0)
听起来更像CSVRecord
不适合嘲笑。如果可能的话,针对在内部使用它的另一个公共类的测试将是更可取的。
否则,JMockit提供Deencapsulation
类newInstance
方法。
作为旁注,Mockito仅支持基于行为的测试; JMockit提供"模拟" (MockUp
),但它与编写基于状态的纯黑盒测试不同。
答案 2 :(得分:-1)
使用:
ConstructorReflection.newInstance
在新版本的Jmockit中。