2012-08-07 183 views
3

我是新來的Mocking框架。我現在正在研究的框架是JMockit,我有疑問。如果我對這個話題的理解很差,請原諒我。使用JMockit嘲笑課程

我有一個類A,它擴展了一個抽象類。類是這樣的:

class A extends AbstractClass{ 
     private B b = UtilClass.getBean("b"); 
     private C c = UtilClass.getBean("c"); 

    ......... 
    ......... 
    ......... 

} 

的UtilClass是這樣的:

public final class UtilClass{ 
    private static UtilContext context = new UtilContext(); 
    //getBean method which returns a bean object 
} 

我想嘲弄的getBean方法。所以要嘲笑這個方法,我必須嘲笑UtilContext類。如果它正在實例化其他類,那麼我也必須嘲笑它​​。這樣我不得不模擬很多類,這不是一個好主意。請幫幫我。

回答

6

如果您只需訪問UtilClass中的getBean方法,則可以模擬整個UtilClass並使用$clinit方法禁用其靜態初始化(它不會禁用在編譯時(常量)解析的靜態初始化) :

new MockUp<UtilClass>() { 
    @Mock 
    void $clinit() { 
     //disable static initialization 
    } 

    @Mock 
    public static SomeType getBean(String s) { 
     if("b".equals(s)) return new B(); 
     if("c".equals(s)) return new C(); 
     ... 
    } 
}; 
+0

感謝您的快速回復。我試過了。這是行得通的。謝謝。 – 2012-08-08 04:52:10

+0

@SnehaParameswaran這是舊的,但請考慮接受答案,如果它幫助你解決你的問題。 – 2014-02-14 14:47:02