Java 使用云流测试不起作用

Java 使用云流测试不起作用,java,spring,testing,spring-cloud,spring-cloud-stream,Java,Spring,Testing,Spring Cloud,Spring Cloud Stream,我尝试了一些春云溪的东西。一切正常,现在我试着写一些测试用例。不幸的是,它们不起作用。我将所有内容简化为以下内容:所有内容都在同一启动应用程序中: 发件人: @EnableBinding(Sender.Emitter.class) public class Sender { public interface Emitter { String CHANNEL = "emitter"; @Output(CHANNEL) MessageChan

我尝试了一些春云溪的东西。一切正常,现在我试着写一些测试用例。不幸的是,它们不起作用。我将所有内容简化为以下内容:所有内容都在同一启动应用程序中:

发件人:

@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());
    }
}
我想使用SpringCloudStream测试支持进行测试,以避免需要AMQP消息代理。在测试之外,我使用rabbitmq,一切正常。 也许SpringCloudStream测试支持并没有真正路由消息?或者这里有什么问题?

spring cloud stream测试支持提供了测试单个spring cloud stream应用程序的能力,并使用TestSupportBinder。因此,这并不意味着要像上面所使用的那样进行端到端集成测试

有关使用SpringCloudStream测试支持和TestSupportBinder的更多信息,您可以参考文档

也许SpringCloudStream测试支持并没有真正路由消息

正确的;测试绑定器只是一个线束,它不在绑定之间布线;在同一个应用程序中为同一个目的地绑定生产者和消费者是不常见的


当您在测试中发送消息时,您必须查询绑定器以确保消息按预期发送。您可以使用MessageCollector来完成此操作。请参阅,您也可以查看一些测试。

首先感谢您的回复。但是你知道如何测试BinderAwareChannelResolver的使用吗?我想测试是否使用正确的目标键和消息调用BinderAwareChannelResolver。你知道这件事吗?知道。只需将MessageCollector用于新解析的目标。看。