gpt4 book ai didi

java - 使用 @MockBean 来模拟具有 @BeforeStep 的 ItemReader 会向许多具有 @Beforestep 注释的方法抛出异常。我该如何解决?

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

我有自己的 ItemReader 实现,有两种方法。

public class Reader implements ItemReader<Integer> {

private final Logger logger = LoggerFactory.getLogger(getClass());
private Iterator<Integer> iterator;

@Override
public Integer read() throws UnexpectedInputException, ParseException, NonTransientResourceException {
if(iterator.hasNext()){
return iterator.next();
}
return null;
}

@BeforeStep
public void init(StepExecution stepExecution){
List<Integer> integerList = (List<Integer>)stepExecution.getJobExecution().getExecutionContext().get(CKEY_ERROREVENT_IDS);
this.iterator = integerList.iterator();
}
}

当我尝试在 spring-batch 上下文中运行它并使用 @MockBean 模拟 ItemReader 时,应用程序上下文会抛出:

java.lang.IllegalArgumentException: found more than one method on target class [Reader$MockitoMock$368106910] with the annotation type [BeforeStep].

以下是我开始工作的方式。

@MockBean
private Reader reader;

@Test
public void readerTest(){
JobParameters jobParameters = new JobParametersBuilder()
.addString("triggerId", UUID.randomUUID().toString()).toJobParameters();
JobExecution jobExecution = jobLauncher.run(processEventJob, jobParameters);
}

最佳答案

我已经能够重现您的问题。之后,我用您的 Reader 的子类替换了模拟。

@Component
public class ChildReader extends Reader{

public void init(StepExecution stepExecution){
super.init(stepExecution);
}
}

这给出了相同的异常。在运行时,Mockito 还会创建 Reader 的子类。我认为这导致了你的问题。

在这篇文章中,描述了相同的问题: http://forum.spring.io/forum/spring-projects/batch/98067-beforestep-in-abstract-class我找不到任何有关它已修复的引用。

解决此问题的方法是将您想要模拟的代码提取到一个单独的类并模拟该类。一个合乎逻辑的地方是 StepExecutionListener。 https://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/core/StepExecutionListener.html

希望这有帮助......

关于java - 使用 @MockBean 来模拟具有 @BeforeStep 的 ItemReader 会向许多具有 @Beforestep 注释的方法抛出异常。我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49998357/

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