У меня есть класс, который должен быть протестировано:Как проверить методы с Mockito/Powermockito
public class AMQProducer {
private final String TCP = "tcp://";
private final String COLON = ":";
AMQProducer() {
}
public AMQProducer(String ip, long port) throws JMSException {
try {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(TCP + ip + COLON + port);
Connection connection = connectionFactory.createConnection();
} catch (JMSException e) {
throw e;
}
}
}
У меня есть тестовый пример:
@RunWith(PowerMockRunner.class)
@PrepareForTest()
public class TestAMQProducer {
@Mock
Connection connection;
@Mock
ActiveMQConnectionFactory connectionFactory;
@Test
public void test() throws Exception {
PowerMockito.whenNew(ActiveMQConnectionFactory.class).withAnyArguments().thenReturn(connectionFactory);
PowerMockito.when(connectionFactory.createConnection()).thenReturn(connection);
AMQProducer producer = new AMQProducer("random", 1234);
}
}
Когда я запускаю тест случай, макет объекта ActiveMQConnectionFactory не используется. Вместо этого, фактическая реализация используется и есть соединение TCP делается:
javax.jms.JMSException: Could not connect to broker URL: tcp://random:2333. Reason: java.net.UnknownHostException: random
Я попытался с Powermockito и Mockito, но не с обоими. Как мне высмеять объекты и как я могу успешно запустить тестовый пример?
Я новичок в модульном тестировании и пытался получить помощь от различных сообществ, но не нашел соответствующего ответа. Любая помощь будет оценена по достоинству. Благодаря!
Инициализировать свои фиктивные объекты в методе @Before –
Вы не можете использовать 'connection' вне конструктора? Действительно ли 'TCP' и' COLON' связаны с доменом 'AMQProducer'? – Spotted