Szydercza zmienna prywatna, która ma istnieć
Jak można uzyskać próbny obiekt w czasie wykonywania, gdy nie jest on tworzony / inicjowany w testowanej klasie, nie jest statyczny (wzorzec singletonu), czy też nie ma jakiegoś konstruktora testowego, do którego można by się podłączyć?
W klasie, dla której piszę testy jednostkowe, natknąłem się na scenariusz, którego jeszcze nie spotkałem / nie rozwiązałem. Mam zasób JMS (aQueueConnectionFactory
dla odniesienia, ale nie powinno to mieć znaczenia), jest to prywatna zmienna klasy, którą testuję. Ponieważ majavax.annotation.Resource
adnotacja, w czasie wykonywania zakłada się, że jest dostępna. Podczas testowania tak nie jest, co stwarza potrzebę wyśmiewania tego obiektu.
Nie jest to klasa statyczna i nie jest używana w sposób statyczny, a jeśli tak, to mógłbym z łatwością wyszydzić za pomocą różnych statycznych metod drwin, na które wpadłem. Ponieważ zasób nigdy nie jest tworzony lokalnie (w konstruktorze, a nawet w konstruktorze testowym), nie mam sposobu na przekazanie obiektu Mock, tak że w czasie wykonywania testu zamiast rzeczywistego obiektu używany jest makieta. Jak mogę wyszydzić ten zasób, aby podczas wykonywania testu był używany zamiast prywatnego@Resource
obiekt w klasie, którą testuję?
Dla odniesienia kod dzwonicreateConnection()
naQueueConnectionFactory
który rzuca wyjątek zerowego wskaźnika, ponieważ Fabryka nie została zainicjowana / wyśmiewana.
@Stateless
public class Example{
@Resource(name = "jms/exampleQCF")
private QueueConnectionFactory queueFactory;
...
public void testMe(){
Connection connection = queueFactory.createConnection();
...
}
}