繁体   English   中英

Spring 批处理:Tasklet 的测试用例 - 从测试 class 调用时,密钥未出现在实际 class 中

[英]Spring batch:Test case for Tasklet - Key is not appearing in actual class when it is invoked from Test class

我正在尝试学习 Batch 和 Tasklet。

我正在为 spring 批处理中的 Tasklet 代码编写测试用例。 我在我的测试 class 和调试中设置了 map 并调试,实际的 class 没有我从测试 ZA2F2ED4F8EBC26BD4C2F2ED4F8EBC26BB4 传递的密钥

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 您应该模拟/存根ExecutionContext实例而不是Map<String, Object>实例。 你的 tasklet 应该调用:

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

代替:

chunkContext.getStepContext().getJobExecutionContext()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM