繁体   English   中英

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

[英]How do I mock a class marked final and has a private constructor using jMockit

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

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

JMockit是否有应对这种情况的方法?

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

如果仅是调用私有构造函数的问题,那么是的,JMockit具有处理此问题的工具。 参见教程

听起来更像CSVRecord不是CSVRecord的理想选择。 如果可能的话,针对以内部使用它的另一个公共类为目标的测试将是更好的选择。

否则,JMockit将为Deencapsulation类提供newInstance方法。

附带说明,Mockito仅支持基于行为的测试。 JMockit提供了“模型”( MockUp ),但它与编写基于状态的纯黑盒测试不同。

采用:

ConstructorReflection.newInstance

在较新版本的Jmockit中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM