【问题标题】:How to mock result from KafkaTemplate如何模拟来自 KafkaTemplate 的结果
【发布时间】:2019-08-13 10:02:25
【问题描述】:

我有一个这样的发送kafka消息的方法:

@Async
public void sendMessage(String topicName, Message message) {
    ListenableFuture<SendResult<String, Message >> future = kafkaTemplate.send(topicName, message);

    future.addCallback(new ListenableFutureCallback<>() {

        @Override
        public void onSuccess(SendResult<String, Message > result) {
            //do nothing
        }

        @Override
        public void onFailure(Throwable ex) {
            log.error("something wrong happened"!);
        }
    });
}

现在我正在为它编写单元测试。我还想测试两个回调方法onSuccessonFailure 方法,所以我的想法是模拟KafkaTemplate,类似于:

KafkaTemplate kafkaTemplate = Mockito.mock(KafkaTemplate.class);

但是现在我被这两种情况的模拟结果卡住了:

when(kafkaTemplate.send(anyString(), any(Message.class))).thenReturn(????);

我应该在thenReturn 方法中为案例成功和案例失败添加什么?请问有人有想法吗?非常感谢!

【问题讨论】:

    标签: spring-kafka


    【解决方案1】:

    您可以模拟模板,但最好模拟界面。

        Sender sender = new Sender();
        KafkaOperations template = mock(KafkaOperations.class);
        SettableListenableFuture<SendResult<String, String>> future = new SettableListenableFuture<>();
        when(template.send(anyString(), any(Message.class))).thenReturn(future);
        sender.setTemplate(template);
        sender.send(...);
    
        future.set(new SendResult<>(...));
    
        ...or...
    
        future.setException(...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多