Насмешка над частной переменной, которая предположительно существует

Как вы можете получить фиктивный объект во время выполнения, если он не был создан / инициализирован в классе, который вы тестируете, он не статичен (одноэлементный шаблон), или у вас нет какого-либо конструктора тестов для подключения?

В классе, для которого я пишу какое-то модульное тестирование, я столкнулся со сценарием, с которым еще не столкнулся / не решил. У меня есть ресурс JMS (QueueConnectionFactory для справки, но это не должно иметь значения), это приватная переменная класса, который я тестирую. Так как он имеетjavax.annotation.Resource аннотации, во время выполнения предполагается, что она доступна. Во время тестирования это не так, что создает необходимость издеваться над этим объектом.

Это не статический класс, и он не используется статическим образом, если бы я мог легко его использовать, используя различные методы статического моделирования, с которыми я столкнулся. Поскольку ресурс никогда не создается локально (в конструкторе или даже в конструкторе теста), я не могу передать объект Mock, чтобы во время выполнения теста вместо фактического объекта использовался mock. Как я могу издеваться над этим ресурсом, чтобы при выполнении теста он использовался вместо частного@Resource объект в классе, который я тестирую?

Для справки код звонитcreateConnection() наQueueConnectionFactory который генерирует исключение нулевого указателя, так как Фабрика не была инициализирована / смоделирована.

@Stateless
public class Example{
  @Resource(name = "jms/exampleQCF")
  private QueueConnectionFactory queueFactory;

  ...

  public void testMe(){
    Connection connection = queueFactory.createConnection();
    ...
  }
}

Ответы на вопрос(1)

Ваш ответ на вопрос