簡體   English   中英

Mockito ArgumentCaptor用於可選參數

[英]Mockito ArgumentCaptor for Optional arguments

在accountHandler類中具有以下簽名的方法

public void processMessage(String accountId, 
Metrics metrics, 
Optional<ZonedDateTime> parsedDatetime) {

        // do something 
}

在測試中,如果要使用參數捕獲器,該如何定義?

嘗試了以下操作,但未按預期工作。

ArgumentCaptor<ZonedDateTime> timeCaptor = ArgumentCaptor.forClass(ZonedDateTime.class);

用argcaptor使其可選的語法是什么?

根據類似的問題 ,使用@Captor批注:

@Captor
private ArgumentCaptor<Optional<ZonedDateTime>> captor;

以下情況是方法簽名的情況:

public void processMessage(Optional<ZonedDateTime> parsedDatetime) {

由於我不知道使用哪個Meteric類,因此我也希望存在Meteric類。

@Test
@SuppressWarnings("unchecked")
public void withValue() {
    ArgumentCaptor<Optional<ZonedDateTime>> timeCaptor = ArgumentCaptor.forClass(Optional.class);
    AccountHandler accountHandler = mock(AccountHandler.class);

    Optional<ZonedDateTime> input = Optional.of(ZonedDateTime.now());
    accountHandler.processMessage(input);

    verify(accountHandler).processMessage(timeCaptor.capture());

    Optional<ZonedDateTime> optional = timeCaptor.getValue();
    assertTrue(optional.isPresent());
    assertNotNull(optional.get());
}

@Test
@SuppressWarnings("unchecked")
public void nullOptional() {
    ArgumentCaptor<Optional<ZonedDateTime>> timeCaptor = ArgumentCaptor.forClass(Optional.class);
    AccountHandler accountHandler = mock(AccountHandler.class);

    Optional<ZonedDateTime> input = null;
    accountHandler.processMessage(input);

    verify(accountHandler).processMessage(timeCaptor.capture());

    Optional<ZonedDateTime> optional = timeCaptor.getValue();
    assertNull(optional);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM