Eine private Variable verspotten, von der angenommen wird, dass sie existiert

Wie können Sie ein Mock-Objekt zur Laufzeit einbinden, wenn es in der zu testenden Klasse nicht erstellt / initialisiert wurde, nicht statisch ist (Singleton-Muster) oder Sie keinen Testkonstruktor zum Einbinden haben?

In einer Klasse, für die ich Unit-Tests schreibe, bin ich auf ein Szenario gestoßen, das ich noch nicht angetroffen / gelöst habe. Ich habe eine JMS-Ressource (aQueueConnectionFactory als Referenz, aber es sollte keine Rolle spielen), das ist eine private Variable der Klasse, die ich teste. Da hat es dasjavax.annotation.Resource Anmerkung, zur Laufzeit wird davon ausgegangen, dass sie verfügbar ist. Während des Testens ist es nicht so, dass das Objekt verspottet werden muss.

Es ist keine statische Klasse und wird nicht auf statische Weise verwendet. Wenn es so wäre, könnte ich mich leicht über die verschiedenen statischen Verspottungsmethoden lustig machen, auf die ich gestoßen bin. Da die Ressource nie lokal erstellt wird (in einem Konstruktor oder sogar in einem Testkonstruktor), kann ich kein Mock-Objekt übergeben, sodass zur Laufzeit des Tests das Mock-Objekt anstelle des tatsächlichen Objekts verwendet wird. Wie kann ich diese Ressource so verspotten, dass sie bei Ausführung des Tests anstelle der privaten Ressource verwendet wird?@Resource Objekt in der Klasse, die ich teste?

Als Referenz ruft der Code aufcreateConnection() auf derQueueConnectionFactory Dies löst eine Nullzeiger-Ausnahme aus, da die Factory nicht initialisiert / verspottet wurde.

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

  ...

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