Насмешливые классы с использованием JMockit

Я новичок в Mocking frameworks. Фреймворк, над которым я сейчас работаю, — это 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. Если он создает экземпляр какого-то другого класса, то я тоже должен издеваться над этим. Таким образом, мне приходится издеваться над множеством классов, что не очень хорошая идея. Помогите пожалуйста мне.


person Sneha Parameswaran    schedule 07.08.2012    source источник


Ответы (1)


Если вам нужен только доступ к методу getBean в UtilClass, вы можете смоделировать весь 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();
        ...
    }
};
person assylias    schedule 07.08.2012
comment
Спасибо вам за быстрый ответ. Я попробовал это. Это работает. Спасибо. - person Sneha Parameswaran; 08.08.2012
comment
@SnehaParameswaran это устарело, но, пожалуйста, рассмотрите возможность принятия ответа, если он помог вам решить вашу проблему. - person Alexis Leclerc; 14.02.2014