第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何模擬 KafkaTemplate 的結果

如何模擬 KafkaTemplate 的結果

Qyouu 2023-06-04 17:38:00
我有一種發(fā)送 kafka 消息的方法是這樣的:@Asyncpublic 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"!);        }    });}現(xiàn)在我正在為它編寫單元測試。我還想測試這兩個回調方法onSuccess和onFailure方法,所以我的想法是模擬 KafkaTemplate,例如:KafkaTemplate kafkaTemplate = Mockito.mock(KafkaTemplate.class);但是現(xiàn)在我陷入了這兩種情況的模擬結果:when(kafkaTemplate.send(anyString(), any(Message.class))).thenReturn(????);thenReturn我應該在案例成功和案例失敗的方法中輸入什么?有人有想法嗎?非常感謝!
查看完整描述

1 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

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


    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(...

編輯


更新為CompletableFuture(Apache Kafka 3.0.x 及更高版本的 Spring)...


public class Sender {


    private  KafkaOperations<String, String> template;


    public void setTemplate(KafkaOperations<String, String> template) {

        this.template = template;

    }


    public void send(String topic, Message<?> data) {

        CompletableFuture<SendResult<String, String>> future = this.template.send(data);

        future.whenComplete((result, ex) -> {

            if (ex == null) {

                System.out.println(result);

            }

            else {

                System.out.println(ex.getClass().getSimpleName() + "(" + ex.getMessage() + ")");

            }

        });

    }


}


@ExtendWith(OutputCaptureExtension.class)

public class So57475464ApplicationTests {


    @Test

    public void test(CapturedOutput captureOutput) {

        Message message = new GenericMessage<>("foo");

        Sender sender = new Sender();

        KafkaOperations template = mock(KafkaOperations.class);

        CompletableFuture<SendResult<String, String>> future = new CompletableFuture<>();

        given(template.send(any(Message.class))).willReturn(future);

        sender.setTemplate(template);

        sender.send("foo", message);

        future.completeExceptionally(new RuntimeException("foo"));

        assertThat(captureOutput).contains("RuntimeException(foo)");

    }


}


查看完整回答
反對 回復 2023-06-04
  • 1 回答
  • 0 關注
  • 224 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號