我尝试了一些与弹簧云流的东西。一切正常,现在我试着写一些测试用例。不幸的是,他们不工作。我的一切归纳为以下的(一切都是在同一种引导程序):使用云流测试不起作用
发件人:
@EnableBinding(Sender.Emitter.class)
public class Sender {
public interface Emitter {
String CHANNEL = "emitter";
@Output(CHANNEL)
MessageChannel events();
}
private Emitter emitter;
public Sender(Emitter emitter) {
this.emitter = emitter;
}
public void sendMessage(String massage) {
emitter.events().send(MessageBuilder.withPayload(massage).build());
}
}
接收器:
@EnableBinding(Receiver.Subscriber.class)
public class Receiver {
public interface Subscriber {
String CHANNEL = "subscriber";
@Input(CHANNEL)
SubscribableChannel events();
}
private String lastMessage;
public String getLastMessage() {
return lastMessage;
}
@StreamListener(Subscriber.CHANNEL)
public void event(String message) {
this.lastMessage = message;
}
}
我的配置:
spring:
cloud:
stream:
default-binder: rabbit
bindings:
emitter:
destination: testtock
content-type: application/json
subscriber:
destination: testtock
测试:
@RunWith(SpringRunner.class)
@SpringBootTest
public class BasicTest {
@Autowired
private Receiver receiver;
@Autowired
private Sender sender;
@Test
public void test() throws InterruptedException {
String massage = UUID.randomUUID().toString();
sender.sendMessage(massage);
//Thread.sleep(1000);
assertEquals(massage, receiver.getLastMessage());
}
}
我想用spring-cloud-stream-test-support
进行测试,不需要AMQP消息代理。在测试之外,我使用了rabbitmq,在那里一切正常。 也许spring-cloud-stream-test-support
不会真的路由消息?或者这里有什么问题?
首先感谢您的回复。但是你知道如何测试BinderAwareChannelResolver的使用吗?我想测试BinderAwareChannelResolver是否被正确的“destination-key”和消息调用。你知道这件事吗? – user3046582
是的。只需使用最近解析的目标的MessageCollector即可。查看[路由器应用测试](https://github.com/spring-cloud-stream-app-starters/router/blob/master/spring-cloud-starter-stream-sink-router/src/test/java/组织/ springframework的/云/流/应用/路由器/汇/ RouterSinkTests.java)。 –