spring - IntelliJ runner 上的集成测试通过但在 gradle 上没有通过

标签 spring spring-boot gradle spring-cloud-stream

我们正在使用 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/

相关文章:

java - 使用不带"No query defined for that name"的spring-data-jpa时出现"@Query"异常

java - 基于Java的Spring配置中搜索资源时如何使用通配符?

java - 指定端口时,Spring Boot Actuator 端点的单元测试不起作用

groovy - Gradle增量任务:将已经生成的代码添加到类路径中

maven - Gradle 将单个存档上传到多个存储库

gradle - android studio:gradle:构建永无止境,无法建立环回连接

java - Spring Web MVC Tiles 属性 'header' 未找到

java - Spring 4 MVC - Rest 服务 - 在 bean 中使用默认值

java - org.hibernate.hql.internal.ast.HqlSqlWalker.setAlias(HqlSqlWalker.java:1093)上的NullPointerException

java - spring-boot 中的 json 日期格式