私はspring-cloud-streamでいくつかのものを試しました。すべてが機能し、今ではいくつかのテストケースを作成しようとしました。残念ながら彼らは働いていません。Cloud Stream Testを使用すると動作しません
送信者:
@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());
}
}
AMQPメッセージブローカーを必要としないテストにはspring-cloud-stream-test-support
を使用します。テストの外で私はrabbitmqを使用します。そこにはすべてが機能しています。 spring-cloud-stream-test-support
は本当にメッセージをルーティングしないのでしょうか?またはここで何が問題なの?
まずはお返事ありがとうございます。しかし、BinderAwareChannelResolverの使用方法をどのようにテストできるかご存じですか?正しい "宛先キー"とメッセージでBinderAwareChannelResolverが呼び出されたかどうかをテストします。これについて何か知っていますか? – user3046582
はい。新しく解決された宛先のMessageCollectorを使用するだけです。 [router app tests](https://github.com/spring-cloud-stream-app-starters/router/blob/master/spring-cloud-starter-stream-sink-router/src/test/java/)を参照してください。 org/springframework/cloud/stream/app/router/sink/RouterSinkTests.java)。 –