3

我是 Mocking 框架的新手。我现在正在研究的框架是 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 类。如果它正在实例化其他类,那么我也必须模拟它。这样我必须模拟很多课程,这不是一个好主意。请帮我。

4

1 回答 1

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();
        ...
    }
};
于 2012-08-07T08:30:34.120 回答