2009-09-08 49 views
0

我有一個單元測試問題,其中一個類有一個想要加載Spring應用程序Ctx的靜態變量。如何在Java中使用JMock模擬靜態變量

這個班不出來豆廠,我不能改變這個事實。

static ApplicationContext applicationContext = ...; 

這工作得很好,但很難JMock的,或至少我不知道的方式,直到我可以在春天CTX要啓動。對單元測試情況不理想。

有沒有人知道的解決方法? 我可以選擇將靜態變量更改爲任何希望的值。

謝謝。

回答

1

自己解決了這個問題。

最後真的很簡單。 Justed需要將我的靜態包裝在我可以模擬的類中。

public class ApplicationContextHolder implements ApplicationContextHoldable { 

    protected static ApplicationContext applicationContext = ...; 

    @Override 
    public ApplicationContext getApplicationContext() { 
     return ApplicationContextHolder.applicationContext; 
    } 

} 
0

不錯。具有諷刺意味的是,一兩件事,春天是擅長的就是管理單身,所以不應該有一個需要靜態變量:)

+0

是的,但在現實世界中,你並不總是有這個選擇:) – JamesC 2010-01-23 14:36:33

0

可以使用基於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; 

    }