From dfaf5001fef96b88bc8c230d46d02bc87d0daaa6 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Wed, 23 Mar 2022 15:39:34 -0400 Subject: [PATCH] Fix AMQP test for NPE from mocks https://build.spring.io/browse/INT-MAIN-261/ **Cherry-pick to `5.5.x`** --- .../amqp/config/OutboundGatewayTests.java | 30 +++++++++---------- .../outbound/AmqpOutboundEndpointTests.java | 21 +++++-------- 2 files changed, 23 insertions(+), 28 deletions(-) diff --git a/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/OutboundGatewayTests.java b/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/OutboundGatewayTests.java index b0820b5292..460b991763 100644 --- a/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/OutboundGatewayTests.java +++ b/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/OutboundGatewayTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,18 +18,20 @@ package org.springframework.integration.amqp.config; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.BDDMockito.willReturn; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; -import org.junit.After; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; @@ -41,6 +43,7 @@ import org.springframework.integration.handler.MessageProcessor; import org.springframework.integration.test.util.TestUtils; import org.springframework.messaging.Message; import org.springframework.messaging.support.GenericMessage; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import org.springframework.test.util.ReflectionTestUtils; /** @@ -51,26 +54,22 @@ import org.springframework.test.util.ReflectionTestUtils; * * @since 2.1 */ +@SpringJUnitConfig public class OutboundGatewayTests { private static final ExpressionParser PARSER = new SpelExpressionParser(); - private final ClassPathXmlApplicationContext context = - new ClassPathXmlApplicationContext(getClass().getSimpleName() + "-context.xml", getClass()); - - @After - public void tearDown() { - context.close(); - } + @Autowired + ConfigurableApplicationContext context; @Test - public void testVanillaConfiguration() throws Exception { + public void testVanillaConfiguration() { assertThat(context.getBeanFactory().containsBeanDefinition("vanilla")).isTrue(); context.getBean("vanilla"); } @Test - public void testExpressionBasedConfiguration() throws Exception { + public void testExpressionBasedConfiguration() { assertThat(context.getBeanFactory().containsBeanDefinition("expression")).isTrue(); Object target = context.getBean("expression"); assertThat(ReflectionTestUtils.getField(ReflectionTestUtils.getField(target, "handler"), @@ -79,7 +78,7 @@ public class OutboundGatewayTests { @Test @SuppressWarnings("unchecked") - public void testExpressionsBeanResolver() throws Exception { + public void testExpressionsBeanResolver() { ApplicationContext context = mock(ApplicationContext.class); doAnswer(invocation -> invocation.getArguments()[0] + "bar").when(context).getBean(anyString()); when(context.containsBean(IntegrationContextUtils.INTEGRATION_EVALUATION_CONTEXT_BEAN_NAME)).thenReturn(true); @@ -92,8 +91,9 @@ public class OutboundGatewayTests { StandardEvaluationContext evalContext = integrationEvaluationContextFactoryBean.getObject(); when(context.getBean(IntegrationContextUtils.INTEGRATION_EVALUATION_CONTEXT_BEAN_NAME, StandardEvaluationContext.class)) - .thenReturn(evalContext); + .thenReturn(evalContext); RabbitTemplate template = spy(new RabbitTemplate()); + willReturn(mock(ConnectionFactory.class)).given(template).getConnectionFactory(); AmqpOutboundEndpoint endpoint = new AmqpOutboundEndpoint(template); endpoint.setRoutingKeyExpression(PARSER.parseExpression("@foo")); endpoint.setExchangeNameExpression(PARSER.parseExpression("@bar")); diff --git a/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/outbound/AmqpOutboundEndpointTests.java b/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/outbound/AmqpOutboundEndpointTests.java index 808d9e0caf..7ee6ab914c 100644 --- a/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/outbound/AmqpOutboundEndpointTests.java +++ b/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/outbound/AmqpOutboundEndpointTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2021 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,9 +30,7 @@ import java.util.Collection; import java.util.List; import java.util.concurrent.TimeUnit; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.springframework.amqp.core.Queue; @@ -40,7 +38,7 @@ import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.connection.CorrelationData; import org.springframework.amqp.rabbit.connection.CorrelationData.Confirm; import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.amqp.rabbit.junit.BrokerRunning; +import org.springframework.amqp.rabbit.junit.RabbitAvailable; import org.springframework.amqp.support.AmqpHeaders; import org.springframework.amqp.utils.test.TestUtils; import org.springframework.beans.factory.BeanFactory; @@ -59,8 +57,7 @@ import org.springframework.messaging.support.GenericMessage; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; /** * @author Oleg Zhurakousky @@ -71,14 +68,11 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; * @since 2.1 * */ -@ContextConfiguration -@RunWith(SpringJUnit4ClassRunner.class) +@SpringJUnitConfig +@RabbitAvailable @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) public class AmqpOutboundEndpointTests { - @Rule - public BrokerRunning brokerRunning = BrokerRunning.isRunning(); - @Autowired private MessageChannel pcRequestChannel; @@ -192,6 +186,7 @@ public class AmqpOutboundEndpointTests { willDoNothing().given(template).send(isNull(), isNull(), any(), any()); List correlationList = new ArrayList<>(); willReturn(correlationList).given(template).getUnconfirmed(100L); + willReturn(mock(ConnectionFactory.class)).given(template).getConnectionFactory(); ArgumentCaptor correlationCaptor = ArgumentCaptor.forClass(CorrelationData.class); AmqpOutboundEndpoint endpoint = new AmqpOutboundEndpoint(template); PollableChannel nacks = new QueueChannel(); @@ -215,7 +210,7 @@ public class AmqpOutboundEndpointTests { assertThat(nack.getPayload()).isInstanceOf(NackedAmqpMessageException.class); assertThat(((NackedAmqpMessageException) nack.getPayload()).getFailedMessage()).isSameAs(message); assertThat(((NackedAmqpMessageException) nack.getPayload()).getCorrelationData()) - .isSameAs(message.getHeaders().getId()); + .isSameAs(message.getHeaders().getId()); assertThat(((NackedAmqpMessageException) nack.getPayload()).getNackReason()).isEqualTo("Confirm timed out"); endpoint.stop(); sched.destroy();