有多条消息时如何测试Spring Cloud Stream?

How to test Spring Cloud Stream when there are multiple messages?

我想用多条消息测试 Spring Cloud Stream Sink。假设我有一个这样的处理器 class:

@Component
@EnableBinding(Processor.class)
public class TestProcessor {
    @Autowired
    private Processor processor;

    @StreamListener(Processor.INPUT)
    public void process(@Payload List<String> values) {
        values.forEach(s -> processor.output().send(MessageBuilder.withPayload(s).build()));
    }
}

现在,我想测试一下。这是我的测试 class:

@ExtendWith(SpringExtension.class)
@SpringBootTest
public class ProcessorTest {
    @Autowired
    private Processor processor;
    @Autowired
    private MessageCollector collector;

    @Test
    public void cdrFilterTriggerFlow_whenNoTrigger_shouldNoResponse() throws JsonProcessingException, InterruptedException {
        processor.input().send(MessageBuilder.withPayload(List.of("a", "b", "c")).build());
        Object payload = collector.forChannel(processor.output()).poll().getPayload();
        assertNotNull(payload);
    }
}

在有效载荷中,我只得到 "a"。如何在有效负载中获取所有 "a""b""c"?或者至少在输出中有三个消息?

继续调用 poll(),直到得到 null