我在测试春季云流服务(写入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。
任何想法可能是什么问题?
谢谢!
[service.write("FooBar");
将异步发送,从而在轮询messages
队列时导致竞争状态。
您需要在测试中添加某种形式的同步。 Awaitility是一个很好的开源库,可以通过轮询将同步添加到您的测试中。