我们正在使用 spring-cloud-stream
进行一个项目。 , 与 rabbitmq
作为消息代理和gradle
.
出于测试目的,我们正在运行一个带有 rabbitmq 实例的 docker 容器。
应用程序.yaml:
spring
rabbitmq:
host: localhost
我有这个测试:
@DirtiesContext(classMode = BEFORE_EACH_TEST_METHOD)
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
public class TasksProcessorIT {
@Test
public void shouldConsumeDeleteUserTask() {
userRepository.insert(INITIAL_USER).block();
final AtomicReference<Message<?>> msgRef = new AtomicReference<>();
inboundEventsChannel.subscribe(msgRef::set);
outboundTasksChannel.send(DELETE_USER_TASK);
await().atMost(FIVE_SECONDS)
.untilAtomic(msgRef, notNullValue());
final Message<?> receivedEvent = msgRef.get();
assertNotNull(receivedEvent);
assertEquals(USER_DELETED, typeHeader(receivedEvent));
assertNull(userRepository.findAll().blockFirst());
}
}
它通过在 Intelij Runner 上运行,但在调用
gradle test
时失败, 我想知道为什么...这是记录的原因:
Caused by: org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers
最佳答案
问题可能是您在不同测试之间的 RabbitMQ 队列中有一些数据,但是由于您完全在测试方法中订阅了 channel ,这可能已经晚了,因为监听器容器已经从队列。
考虑在测试之间清理队列以进行测试。
关于spring - IntelliJ runner 上的集成测试通过但在 gradle 上没有通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49913363/