如何嘲笑类标记为final,具有使用jMockit私有构造函数(How do I mock a cl

2019-10-21 18:15发布

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

既然是包专用,我不能叫新CSVRecord(arg, arg, ...)这意味着我可以永远我实例我嘲笑。 其母公司,CSVParser,是可以创建一个实例唯一的类。

是否JMockit有办法对付这种情况?

注意: JMockitMockito是我们用在这个项目上唯一的框架。 没有其他的框架是可以接受的。 我的选择是使用样机。

Answer 1:

这听起来更像是CSVRecord不是嘲弄一个很好的候选人。 如果可能的话,测试靶向其内部使用它的另一个公共类将是可取的。

否则,JMockit提供Deencapsulation带班newInstance方法。

作为一个侧面说明,只的Mockito支持基于行为的测试; JMockit提供了“实体模型”( MockUp ),但它是不一样的写一个纯粹的基于状态的黑盒测试。



Answer 2:

如果它仅仅是一个调用私有构造的事,那么,JMockit有工具来面对这一切。 查看教程



Answer 3:

采用:

ConstructorReflection.newInstance

在Jmockit的新版本。



文章来源: How do I mock a class marked final and has a private constructor using jMockit