Пакет Spring: тестовый пример для тасклета - ключ не отображается в реальном классе, когда он вызывается из тестового класса - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь изучить пакетную обработку и тасклет.

Я пишу тестовый пример для кода тасклета в весенней партии. Я устанавливаю карту в своем тестовом классе и отлаживаю, фактический класс не имеет ключа, который я передаю из моего тестового класса.

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]}

     }

 }

Я не уверен, почему это происходит, я что-то делаю не так? Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 06 мая 2020

Ваша проблема здесь:

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

map не ExecutionContext. Вы должны издеваться над экземпляром ExecutionContext, а не Map<String, Object>. Ваш тасклет должен звонить:

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

вместо:

chunkContext.getStepContext().getJobExecutionContext()
...