使用JMockit模拟类

3

我是一名新手,对于模拟框架并不熟悉。我现在正在使用的框架是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类。如果它正在实例化其他类,则我也必须模拟该类。这样,我必须模拟许多类,这不是一个好主意。请帮帮我。

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();
        ...
    }
};

谢谢您的快速回复。我尝试了一下,这个方法可行。非常感谢。 - Sneha Parameswaran
@SnehaParameswaran 这是旧的回复,但如果它帮助您解决了问题,请考虑接受答案。 - Alexis Leclerc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接