Skip to content

Commit 602d5fe

Browse files
committed
Fix AMQP test for NPE from mocks
https://build.spring.io/browse/INT-MAIN-261/ **Cherry-pick to `5.5.x`**
1 parent d23afa2 commit 602d5fe

File tree

2 files changed

+23
-28
lines changed

2 files changed

+23
-28
lines changed

spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/OutboundGatewayTests.java

+15-15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2019 the original author or authors.
2+
* Copyright 2002-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -18,18 +18,20 @@
1818

1919
import static org.assertj.core.api.Assertions.assertThat;
2020
import static org.mockito.ArgumentMatchers.anyString;
21+
import static org.mockito.BDDMockito.willReturn;
2122
import static org.mockito.Mockito.doAnswer;
2223
import static org.mockito.Mockito.mock;
2324
import static org.mockito.Mockito.spy;
2425
import static org.mockito.Mockito.when;
2526

26-
import org.junit.After;
27-
import org.junit.Test;
27+
import org.junit.jupiter.api.Test;
2828

29+
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
2930
import org.springframework.amqp.rabbit.core.RabbitTemplate;
3031
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
32+
import org.springframework.beans.factory.annotation.Autowired;
3133
import org.springframework.context.ApplicationContext;
32-
import org.springframework.context.support.ClassPathXmlApplicationContext;
34+
import org.springframework.context.ConfigurableApplicationContext;
3335
import org.springframework.expression.ExpressionParser;
3436
import org.springframework.expression.spel.standard.SpelExpressionParser;
3537
import org.springframework.expression.spel.support.StandardEvaluationContext;
@@ -41,6 +43,7 @@
4143
import org.springframework.integration.test.util.TestUtils;
4244
import org.springframework.messaging.Message;
4345
import org.springframework.messaging.support.GenericMessage;
46+
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
4447
import org.springframework.test.util.ReflectionTestUtils;
4548

4649
/**
@@ -51,26 +54,22 @@
5154
*
5255
* @since 2.1
5356
*/
57+
@SpringJUnitConfig
5458
public class OutboundGatewayTests {
5559

5660
private static final ExpressionParser PARSER = new SpelExpressionParser();
5761

58-
private final ClassPathXmlApplicationContext context =
59-
new ClassPathXmlApplicationContext(getClass().getSimpleName() + "-context.xml", getClass());
60-
61-
@After
62-
public void tearDown() {
63-
context.close();
64-
}
62+
@Autowired
63+
ConfigurableApplicationContext context;
6564

6665
@Test
67-
public void testVanillaConfiguration() throws Exception {
66+
public void testVanillaConfiguration() {
6867
assertThat(context.getBeanFactory().containsBeanDefinition("vanilla")).isTrue();
6968
context.getBean("vanilla");
7069
}
7170

7271
@Test
73-
public void testExpressionBasedConfiguration() throws Exception {
72+
public void testExpressionBasedConfiguration() {
7473
assertThat(context.getBeanFactory().containsBeanDefinition("expression")).isTrue();
7574
Object target = context.getBean("expression");
7675
assertThat(ReflectionTestUtils.getField(ReflectionTestUtils.getField(target, "handler"),
@@ -79,7 +78,7 @@ public void testExpressionBasedConfiguration() throws Exception {
7978

8079
@Test
8180
@SuppressWarnings("unchecked")
82-
public void testExpressionsBeanResolver() throws Exception {
81+
public void testExpressionsBeanResolver() {
8382
ApplicationContext context = mock(ApplicationContext.class);
8483
doAnswer(invocation -> invocation.getArguments()[0] + "bar").when(context).getBean(anyString());
8584
when(context.containsBean(IntegrationContextUtils.INTEGRATION_EVALUATION_CONTEXT_BEAN_NAME)).thenReturn(true);
@@ -92,8 +91,9 @@ public void testExpressionsBeanResolver() throws Exception {
9291
StandardEvaluationContext evalContext = integrationEvaluationContextFactoryBean.getObject();
9392
when(context.getBean(IntegrationContextUtils.INTEGRATION_EVALUATION_CONTEXT_BEAN_NAME,
9493
StandardEvaluationContext.class))
95-
.thenReturn(evalContext);
94+
.thenReturn(evalContext);
9695
RabbitTemplate template = spy(new RabbitTemplate());
96+
willReturn(mock(ConnectionFactory.class)).given(template).getConnectionFactory();
9797
AmqpOutboundEndpoint endpoint = new AmqpOutboundEndpoint(template);
9898
endpoint.setRoutingKeyExpression(PARSER.parseExpression("@foo"));
9999
endpoint.setExchangeNameExpression(PARSER.parseExpression("@bar"));

spring-integration-amqp/src/test/java/org/springframework/integration/amqp/outbound/AmqpOutboundEndpointTests.java

+8-13
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2021 the original author or authors.
2+
* Copyright 2002-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -30,17 +30,15 @@
3030
import java.util.List;
3131
import java.util.concurrent.TimeUnit;
3232

33-
import org.junit.Rule;
34-
import org.junit.Test;
35-
import org.junit.runner.RunWith;
33+
import org.junit.jupiter.api.Test;
3634
import org.mockito.ArgumentCaptor;
3735

3836
import org.springframework.amqp.core.Queue;
3937
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
4038
import org.springframework.amqp.rabbit.connection.CorrelationData;
4139
import org.springframework.amqp.rabbit.connection.CorrelationData.Confirm;
4240
import org.springframework.amqp.rabbit.core.RabbitTemplate;
43-
import org.springframework.amqp.rabbit.junit.BrokerRunning;
41+
import org.springframework.amqp.rabbit.junit.RabbitAvailable;
4442
import org.springframework.amqp.support.AmqpHeaders;
4543
import org.springframework.amqp.utils.test.TestUtils;
4644
import org.springframework.beans.factory.BeanFactory;
@@ -59,8 +57,7 @@
5957
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
6058
import org.springframework.test.annotation.DirtiesContext;
6159
import org.springframework.test.annotation.DirtiesContext.ClassMode;
62-
import org.springframework.test.context.ContextConfiguration;
63-
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
60+
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
6461

6562
/**
6663
* @author Oleg Zhurakousky
@@ -71,14 +68,11 @@
7168
* @since 2.1
7269
*
7370
*/
74-
@ContextConfiguration
75-
@RunWith(SpringJUnit4ClassRunner.class)
71+
@SpringJUnitConfig
72+
@RabbitAvailable
7673
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
7774
public class AmqpOutboundEndpointTests {
7875

79-
@Rule
80-
public BrokerRunning brokerRunning = BrokerRunning.isRunning();
81-
8276
@Autowired
8377
private MessageChannel pcRequestChannel;
8478

@@ -192,6 +186,7 @@ public void syncConfirmTimeout() {
192186
willDoNothing().given(template).send(isNull(), isNull(), any(), any());
193187
List<CorrelationData> correlationList = new ArrayList<>();
194188
willReturn(correlationList).given(template).getUnconfirmed(100L);
189+
willReturn(mock(ConnectionFactory.class)).given(template).getConnectionFactory();
195190
ArgumentCaptor<CorrelationData> correlationCaptor = ArgumentCaptor.forClass(CorrelationData.class);
196191
AmqpOutboundEndpoint endpoint = new AmqpOutboundEndpoint(template);
197192
PollableChannel nacks = new QueueChannel();
@@ -215,7 +210,7 @@ public void syncConfirmTimeout() {
215210
assertThat(nack.getPayload()).isInstanceOf(NackedAmqpMessageException.class);
216211
assertThat(((NackedAmqpMessageException) nack.getPayload()).getFailedMessage()).isSameAs(message);
217212
assertThat(((NackedAmqpMessageException) nack.getPayload()).getCorrelationData())
218-
.isSameAs(message.getHeaders().getId());
213+
.isSameAs(message.getHeaders().getId());
219214
assertThat(((NackedAmqpMessageException) nack.getPayload()).getNackReason()).isEqualTo("Confirm timed out");
220215
endpoint.stop();
221216
sched.destroy();

0 commit comments

Comments
 (0)