我经常遇到模拟直接实例化类的问题:
final File configFile = new File(pathFile);
我想模仿new File(pathFile)
以制作doReturn(otherFile)
。
我发现我可以通过将其包装在另一个方法中来模拟直接实例化。事情是我不想通过为单元测试创建实例化方法来修改我的所有代码,这将是丑陋的。
还有其他办法吗?
答案 0 :(得分:-1)
在理想情况下,您的方法调用是不透明的:您可以影响它的唯一方法是更改其状态,依赖项或参数。构造函数本质上是静态方法调用,它不提供覆盖或调整行为的机会(在Java中)。构造函数也可以内联,并且可能在某些虚拟机上发生。
除了创建测试"接缝"对于你自己来说,例如工厂对象或可覆盖的方法,你唯一的另一个选择是在编译类和在测试中运行它之间编辑字节码 - 顺便说一句,它是what PowerMock does,就像在默认语言环境的评论。虽然PowerMock是一个功能强大且实用的库,但它确实有一些非常具体的安装步骤,这些步骤可能很难实现,然后您将测试PowerMock编辑的被测试类版本,而不是类本身
请参阅this answer以获取相关问题(如何在私有字段中模拟实例)。具体的结果是不同的,但同样地,你必须重构测试或打破封装。