2012-08-07 178 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