我有一個單元測試問題,其中一個類有一個想要加載Spring應用程序Ctx的靜態變量。如何在Java中使用JMock模擬靜態變量
這個班不出來豆廠,我不能改變這個事實。
static ApplicationContext applicationContext = ...;
這工作得很好,但很難JMock的,或至少我不知道的方式,直到我可以在春天CTX要啓動。對單元測試情況不理想。
有沒有人知道的解決方法? 我可以選擇將靜態變量更改爲任何希望的值。
謝謝。
我有一個單元測試問題,其中一個類有一個想要加載Spring應用程序Ctx的靜態變量。如何在Java中使用JMock模擬靜態變量
這個班不出來豆廠,我不能改變這個事實。
static ApplicationContext applicationContext = ...;
這工作得很好,但很難JMock的,或至少我不知道的方式,直到我可以在春天CTX要啓動。對單元測試情況不理想。
有沒有人知道的解決方法? 我可以選擇將靜態變量更改爲任何希望的值。
謝謝。
自己解決了這個問題。
最後真的很簡單。 Justed需要將我的靜態包裝在我可以模擬的類中。
public class ApplicationContextHolder implements ApplicationContextHoldable {
protected static ApplicationContext applicationContext = ...;
@Override
public ApplicationContext getApplicationContext() {
return ApplicationContextHolder.applicationContext;
}
}
不錯。具有諷刺意味的是,一兩件事,春天是擅長的就是管理單身,所以不應該有一個需要靜態變量:)
可以使用基於API的JMock的反射來設置私有/靜態字段
import static mockit.Deencapsulation.setField;
//Test method
public void testSample {
setField(Sample.class,"isPrivate",true);
setField(Sample.class,"isStatic",true);
}
private class Sample {
private boolean isPrivate = false;
private boolean isStatic = false;
}
是的,但在現實世界中,你並不總是有這個選擇:) – JamesC 2010-01-23 14:36:33