如何在 Java 中轻松模拟出静态方法?
我正在使用 Spring 2.5 和 JUnit 4.4
@Service
public class SomeServiceImpl implements SomeService {
public Object doSomething() {
Logger.getLogger(this.class); //a static method invoked.
// ...
}
}
我不控制我的服务需要调用的静态方法,因此我无法将其重构为更易于单元测试。我用过Log4J Logger作为一个例子,但真正的静态方法是相似的。 改变静态方法不是一个选项。
做 Grails 工作,我习惯使用类似的东西:
def mockedControl = mockFor(Logger)
mockControl.demand.static.getLogger{Class clazz-> … }
…
mockControl.verify()
如何在 Java 中做类似的事情?
最佳答案
你的意思是你不能控制调用代码?因为如果您控制对静态方法的调用 而不是实现本身,您可以轻松地使其可测试。使用与静态方法具有相同签名的单个方法创建依赖接口(interface)。您的生产实现只会调用静态方法,但当前调用静态方法的任何东西都将通过接口(interface)调用。
然后您可以以正常方式模拟该界面。
关于java - 如何在 Java (jUnit4) 中轻松模拟出静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1203027/