【问题标题】:Mocking classes using JMockit使用 JMockit 模拟类
【发布时间】:2012-08-07 07:55:40
【问题描述】:

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

【问题讨论】:

    标签: java testing jmockit


    【解决方案1】:

    如果只需要访问 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();
            ...
        }
    };
    

    【讨论】:

    • 感谢您的快速回复。我试过了。这是有效的。谢谢。
    • @SnehaParameswaran 这是旧的,但如果它帮助您解决问题,请考虑接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 2012-06-29
    • 2018-09-19
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多