![](/img/trans.png)
[英]How to capture arguments which are functions using ArgumentCaptor mockito
[英]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.