Powermock 和 FileUtils 包
Powermock and FileUtils package
我们可以使用 PowerMock 模拟 FileUtils 包的静态方法吗?我有一个要求,我的业务代码调用 FileUtils 包的 copyFileToURL(url,file) 并且为了进行单元测试,我必须使用 Powermock 模拟它,这会给出未完成的存根异常。
这个link,建议我们不能mock这些文件utils所属的java.lang包的classes?我不想围绕这个 class 创建包装器。还有其他办法吗?
当您仔细阅读该链接问题时,您会发现:
I cannot mock classes in from java.lang, java.net, java.io or other system classes, why?
但是您打算使用 Apache Commons FileUtil class method.
从这个意义上说:您想模拟静态 "commons or garden" 方法。
如果这不起作用:你做错了。所以,简单的回答:再读一遍他们的documentation;并检查您的代码哪里有偏差。
但除此之外:使用静态总是意味着:因为它会导致生产代码的紧密耦合;并且您失去了多态性的优势。这意味着:您在可以使用的模拟框架中受到限制(因为只有 PowerMock 或 JMockit 支持静态模拟)。
因此我的真正答案是:用那几行代码,围绕静态方法构建一个包装器;并摆脱模拟静态调用的要求。
我们可以使用 PowerMock 模拟 FileUtils 包的静态方法吗?我有一个要求,我的业务代码调用 FileUtils 包的 copyFileToURL(url,file) 并且为了进行单元测试,我必须使用 Powermock 模拟它,这会给出未完成的存根异常。
这个link
当您仔细阅读该链接问题时,您会发现:
I cannot mock classes in from java.lang, java.net, java.io or other system classes, why?
但是您打算使用 Apache Commons FileUtil class method.
从这个意义上说:您想模拟静态 "commons or garden" 方法。
如果这不起作用:你做错了。所以,简单的回答:再读一遍他们的documentation;并检查您的代码哪里有偏差。
但除此之外:使用静态总是意味着:因为它会导致生产代码的紧密耦合;并且您失去了多态性的优势。这意味着:您在可以使用的模拟框架中受到限制(因为只有 PowerMock 或 JMockit 支持静态模拟)。
因此我的真正答案是:用那几行代码,围绕静态方法构建一个包装器;并摆脱模拟静态调用的要求。