小编典典

Java 为什么Mockito不模拟静态方法?

java

我在这里阅读了一些有关静态方法的主题,我认为我理解滥用/过度使用静态方法可能导致的问题。但是我并没有真正理解为什么很难模拟静态方法的原因。

我知道其他模拟框架(例如PowerMock)可以做到这一点,但为什么Mockito不能?


阅读 353

收藏
2020-03-15

共1个答案

小编典典

我认为原因可能是模拟对象库通常通过在运行时动态创建类(使用cglib)来创建模拟。这意味着他们要么在运行时实现一个接口(如果我没有记错的话,这就是EasyMock所做的事情),要么从类中继承要模拟的东西(如果我没记错的话,这就是Mockito所做的事情)。这两种方法都不适用于静态成员,因为你不能使用继承来覆盖它们。

模拟静态变量的唯一方法是在运行时修改类的字节码,我想这比继承要复杂得多。

这就是我的猜测,这是值得的…

2020-03-15