如何輕鬆地嘲笑Java中的靜態方法?如何輕鬆地嘲笑Java中的靜態方法(jUnit4)
我使用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中類似的事情?
你可以改變你的SomeServiceImpl實現嗎? – 2009-07-29 21:07:39
沒關係,Jon Skeet剛剛發佈了我的想法。我感到自豪! (像Jon Skeet嘿嘿) – 2009-07-29 21:09:11
是的,我可以改變SomeServiceImpl,但我爲什麼要?爲什麼額外的間接? – 2009-07-29 22:11:56