有关测试春季云流服务的问题

问题描述 投票:0回答:1

我在测试春季云流服务(写入Kafka流)时遇到问题。它基于以下baeldung introduction

这里是服务代码(省略详细信息)

@Service
@EnableBinding(Source.class)
public class KafkaWriterService {

    @SendTo(Source.OUTPUT)
    public String write(String str) {
        return str;
    }

}

这里是测试

@SpringBootTest
@RunWith(SpringRunner.class)
public class KafkaWriterServiceTest {

    @Autowired
    private Source source;

    @Autowired
    private MessageCollector collector;

    @Autowired
    private KafkaWriterService service;

    @Test
    public void testMessages() {
        BlockingQueue<Message<?>> messages = collector.forChannel(source.output());
        service.write("FooBar");

        Object payload = messages.poll().getPayload();
        System.out.println(payload);
    }

相当简单,但是在执行测试时,我得到了NullPointerException,因为民意调查返回了Null。

任何想法可能是什么问题?

谢谢!

java spring-boot testing apache-kafka spring-cloud-stream
1个回答
0
投票

[service.write("FooBar");将异步发送,从而在轮询messages队列时导致竞争状态。

您需要在测试中添加某种形式的同步。 Awaitility是一个很好的开源库,可以通过轮询将同步添加到您的测试中。

© www.soinside.com 2019 - 2024. All rights reserved.