模拟直接实例化类

时间:2015-07-20 10:06:32

标签: java mocking mockito

我经常遇到模拟直接实例化类的问题:

final File configFile = new File(pathFile);

我想模仿new File(pathFile)以制作doReturn(otherFile)

我发现我可以通过将其包装在另一个方法中来模拟直接实例化。事情是我不想通过为单元测试创​​建实例化方法来修改我的所有代码,这将是丑陋的。

还有其他办法吗?

1 个答案:

答案 0 :(得分:-1)

在理想情况下,您的方法调用是不透明的:您可以影响它的唯一方法是更改​​其状态,依赖项或参数。构造函数本质上是静态方法调用,它不提供覆盖或调整行为的机会(在Java中)。构造函数也可以内联,并且可能在某些虚拟机上发生。

除了创建测试"接缝"对于你自己来说,例如工厂对象或可覆盖的方法,你唯一的另一个选择是在编译类和在测试中运行它之间编辑字节码 - 顺便说一句,它是what PowerMock does,就像在默认语言环境的评论。虽然PowerMock是一个功能强大且实用的库,但它确实有一些非常具体的安装步骤,这些步骤可能很难实现,然后您将测试PowerMock编辑的被测试类版本,而不是类本身

请参阅this answer以获取相关问题(如何在私有字段中模拟实例)。具体的结果是不同的,但同样地,你必须重构测试或打破封装。