gpt4 book ai didi

java - Mockito 在 "recording"时间捕获参数并在稍后执行时使用它

转载 作者:行者123 更新时间:2023-12-02 11:47:16 25 4
gpt4 key购买 nike

我想测试以下代码:

pojo.setStatus(Status.INITIAL);
pojo.setExecutionCounter(0);
//eventRepository is a mock
scheduleEvent(this.eventRepository.save(pojo).get());

在单元测试中,我想验证这一点

  • pojo 已进行相应修改
  • 将安排的 Activity 状态为 INITIAL,计数器为 0
  • 模拟的保存已被调用

不幸的是,我不知道如何做到这一点,因为我必须返回我必须捕获的参数。当我展示单元测试的示例时,也许它会变得更加清晰:

succeededEvent.setEventStatus(INITIAL);
succeededEvent.setExecutionCounter(0);

//Actually we want here to return the argument
//which is captured by eventArgumentCaptor??
when(this.eventRepository.save(this.eventArgumentCaptor.capture()))
.thenReturn(succededEvent);

this.processor.processEvent(initialEvent);

Mockito.verify(this.eventRepository,
Mockito.times(1)).save(eventCaptureExecuteCaptor.capture());

final Event capturedEvent = eventCaptureExecuteCaptor.getValue();
//Counter and status should be reset
assertEquals(new Integer(0), capturedEvent.getExecutionCounter());
assertEquals(INITIAL, capturedEvent.getEventStatus());
verify(this.eventRepository,
times(1)).save(eq(eventCaptureExecuteCaptor.getValue()));

最佳答案

不知道为什么在 stub 时需要使用 captor。您可以在调用 SUT 之后按照设计使用它:

this.processor.processEvent(initialEvent);

Mockito.verify(this.eventRepository,
Mockito.times(1)).save(eventCaptureExecuteCaptor.capture());

stub 时,您可以直接获取所需的具体对象:

when(this.eventRepository.save(succededEvent)
.thenReturn(succededEvent);

或者如果您在设置时手头没有该对象,则使用通用输入:

when(this.eventRepository.save(anyClass(EventPojo.class))
.thenReturn(succededEvent);

编辑:

您还可以使用 thenAnswer 以及接受 Pojo 类型的任何输入类:

when(this.eventRepository.save(Mockito.any(EventPojo.class))
.thenAnswer(new Answer<EventPojo>(){
EventPojo pojo = invocation.getArgument(0);
return pojo;
}
);

由于这是一个匿名实现,如果需要,您可以捕获传递的 pojo 的状态。

关于java - Mockito 在 "recording"时间捕获参数并在稍后执行时使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48109107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com