在accountHandler类中使用以下签名
的方法public void processMessage(String accountId,
Metrics metrics,
Optional<ZonedDateTime> parsedDatetime) {
// do something
}
在测试中,如果我想使用参数捕获器,我该如何定义它?
尝试了以下操作,但没有按预期工作。
ArgumentCaptor<ZonedDateTime> timeCaptor = ArgumentCaptor.forClass(ZonedDateTime.class);
使用argcaptor使这个可选的语法是什么?
答案 0 :(得分:3)
根据similar question,使用@Captor注释:
@Captor
private ArgumentCaptor<Optional<ZonedDateTime>> captor;
答案 1 :(得分:2)
以下案例适用于以下方法签名:
public void processMessage(Optional<ZonedDateTime> parsedDatetime) {
由于我不知道使用了哪个Meteric
类,我也希望AccountHandler类存在。
@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);
}