【发布时间】:2017-04-21 05:27:46
【问题描述】:
场景:我有 3 个 spring 云流媒体应用
- 1'st:将 XML 有效负载解组到 JAXB 对象中
- 2'nd:将 JAXB 负载转换为我们的域 POJO
- 第 3 次:验证域对象
我正在尝试测试第三个应用程序。我已将第一个和第二个应用程序包含为测试依赖项。我已添加:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-test-support</artifactId>
<scope>test</scope>
</dependency>
现在我有大约 20 个包含各种验证场景的 xml 文件。第一个测试工作正常。我可以使用以下方式获取频道的预期消息:
final Message<PaymentInstruction> mceMessage =
(Message<PaymentInstruction>) collector.forChannel(
validationBindings.mce()).take();
运行的第二个测试是我遇到问题的地方。测试只是在“接受”。
我在 spring-integration-core-4.3.8.jar 中进行了一些挖掘,并将问题追溯到 org.springframework.integration.dispatcher.AbstractDispatcher:
@Override
public synchronized boolean addHandler(MessageHandler handler) {
Assert.notNull(handler, "handler must not be null");
Assert.isTrue(this.handlers.size() < this.maxSubscribers, "Maximum subscribers exceeded");
boolean added = this.handlers.add(handler);
if (this.handlers.size() == 1) {
this.theOneHandler = handler;
}
else {
this.theOneHandler = null;
}
return added;
}
为第一个测试添加了一个处理程序,因此它将 null 分配给 'this.theOneHandler'
我的选择是:
- 重构其他 2 个项目中的代码,以便我可以在不需要 Spring Cloud 应用程序代码的情况下解组和创建我的域对象
- 我可以为每个测试用例创建一个单独的单元测试类,但是我不想走这条路,因为 Spring Boot 的启动时间会很长,会乘以测试用例的数量
- 我是否缺少一些允许我拥有这些多个处理程序的配置,或者我是否打破了我想要使用 Spring Cloud Streaming 的方式?
环境:
- Java 8 更新 131
- org.springframework.cloud:spring-cloud-dependencies:Dalston.RELEASE
- org.springframework.boot:spring-boot-dependencies:1.5.2.RELEASE
【问题讨论】:
标签: spring-integration spring-test spring-cloud-stream