Как вы можете получить макет объекта во время выполнения, когда он не создан/инициализирован в тестируемом классе, он не является статическим (singleton pattern) или у вас нет какого-либо конструктора тестов,
В классе, для которого я пишу какое-то модульное тестирование, я столкнулся с сценарием, который еще не встречался/не решил. У меня есть ресурс JMS (a QueueConnectionFactory
для справки, но это не имеет значения), то есть приватная переменная класса, который я тестирую. Поскольку он имеет аннотацию javax.annotation.Resource
, во время выполнения предполагается, что он доступен. Во время тестирования это не так, что создает необходимость издеваться над этим объектом.
Это не статический класс и не используется статическим образом, если бы я мог легко издеваться над использованием различных статических методов издевательства, с которыми я столкнулся. Поскольку ресурс никогда не создается локально (в конструкторе или даже в конструкторе тестов), у меня нет способа передать объект Mock, чтобы во время выполнения теста вместо фактического объекта использовался макет. Как я могу издеваться над этим ресурсом, чтобы при выполнении теста он использовался вместо частного @Resource
объекта в классе, который я тестировал?
Для справки, код вызывает createConnection()
в QueueConnectionFactory
, который бросает исключение нулевого указателя, поскольку Factory не был инициализирован/изделен.
@Stateless
public class Example{
@Resource(name = "jms/exampleQCF")
private QueueConnectionFactory queueFactory;
...
public void testMe(){
Connection connection = queueFactory.createConnection();
...
}
}