我想编写使用一些基于状态的测试JMockit
小样CSVRecord 。 问题是, CSVRecord
是final
(这意味着我必须使用像模拟框架JMockit
)和CSVRecord's
构造函数包私有可见。
既然是包专用,我不能叫新CSVRecord(arg, arg, ...)
这意味着我可以永远我实例我嘲笑。 其母公司,CSVParser,是可以创建一个实例唯一的类。
是否JMockit
有办法对付这种情况?
注意: JMockit
或Mockito
是我们用在这个项目上唯一的框架。 没有其他的框架是可以接受的。 我的选择是使用样机。
这听起来更像是CSVRecord
不是嘲弄一个很好的候选人。 如果可能的话,测试靶向其内部使用它的另一个公共类将是可取的。
否则,JMockit提供Deencapsulation
带班newInstance
方法。
作为一个侧面说明,只的Mockito支持基于行为的测试; JMockit提供了“实体模型”( MockUp
),但它是不一样的写一个纯粹的基于状态的黑盒测试。
如果它仅仅是一个调用私有构造的事,那么,JMockit有工具来面对这一切。 查看教程
采用:
ConstructorReflection.newInstance
在Jmockit的新版本。
文章来源: How do I mock a class marked final and has a private constructor using jMockit