gpt4 book ai didi

java - Spring 批处理 :Test case for Tasklet - Key is not appearing in actual class when it is invoked from Test class

转载 作者:行者123 更新时间:2023-12-01 16:55:19 25 4
gpt4 key购买 nike

我正在尝试学习 Batch 和 Tasklet。

我正在为 Spring Batch 中的 Tasklet 代码编写一个测试用例。我在我的测试类中设置一个映射并进行调试,实际的类没有我从测试类传递的 key 。

MyEventTasklet.java

public class MyEventTasklet implements Tasklet {
public RepeatStatus execute (StepContribution contribution, ChunkContext chunkContext){

TreeMap<String, Map<Integer, Set<Student>>> studentMap = chunkContext.getStepContext().getJobExecutionContext().get("keyOfStudentMap");

}
}

MyEventTaskletTest.java

         @RunWith(MockitoJunitRunner.class)
public class MyEventTaskletTest{

@Mock
StepContribution stepContribution;

@Mock
ChunkContext chunkContext;

@Mock
StepContext stepContext;

@InjectMocks
MyEventTasklet myEventTasklet = new MyEventTasklet();

@Test
public void testExecute(){

TreeMap<String, Map<Integer, Set<Student>>> studentMap = new TreeMap<>();
Map<Integer, Set<Student>> m2 = new TreeMap<>();
m2.put(100, createStudentData());

studentMap.put("keyOfStudentMap", m2);

Map<String, Object> map = new TreeMap<>();
map.put("keyOfStudentMap", new Object());

chunkContext = Mockito.mock(ChunkContext.class);
stepContribution = Mockito.mock(StepContribution.class);
stepContext = Mockito.mock(StepContext.class);

Mockito.when(stepContext.getJobExecutionContext()).thenReturn(map);
Mockito.when(chunkContext.getStepContext()).thenReturn(stepContext);
Mockito.when(chunkContext.getStepContext().getJobExecutionContext().get("keyOfStudentMap"))
.thenReturn((TreeMap<String, Map<Integer, Set<Student>>>)studentMap);

// When I am debugging I can see here, the studentMap object which is having something like {keyOfStudentMap={100=[StudentObject]}},
but when I see in actual class it is becoming {100=[StudentObject]}

}

}

我不知道为什么会发生这种情况,我做错了什么吗?任何形式的帮助将不胜感激。

最佳答案

您的问题在这里:

Mockito.when(stepContext.getJobExecutionContext()).thenReturn(map);

map不是ExecutionContext 。你应该 mock / stub ExecutionContext实例而不是 Map<String, Object>实例。您的小任务应该调用:

chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext()

而不是:

chunkContext.getStepContext().getJobExecutionContext()

关于java - Spring 批处理 :Test case for Tasklet - Key is not appearing in actual class when it is invoked from Test class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61600546/

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