Spring Batch Tasklet для проверки файлов — требуется обработка исключенийPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Spring Batch Tasklet для проверки файлов — требуется обработка исключений

Сообщение Anonymous »

Я работаю над приложением Spring Batch и реализовал собственный Partitioner, чтобы разделить обработку на несколько потоков. У меня возникли проблемы с написанием теста JUnit 4 для моего partition метод. Я издевался над своим DataSource и JdbcTemplate, но я не уверен, что я утверждаю правильные условия или правильна ли моя настройка.
Этот код проверяет количество вхождений чего-либо, что может быть чем угодно, от записей до события, на которые ссылается метод dto (объект передачи данных). Вот что делает логика, описанная простыми словами:
Код запрашивает у dto количество вхождений с помощью метода dto.getNumOfOccur().
Если количество вхождений равно нулю (это означает, что вхождений не было), код устанавливает для dto статус «НОВЫЙ», указывая, что все, что проверяется, является новым или не происходило ранее.
Если какое-либо число больше нуля (это означает, что произошло хотя бы одно событие), статус устанавливается на «СУЩЕСТВУЕТ», что указывает на то, что событие не является новым и случалось раньше.
Этот статус устанавливается с помощью метода dto.setNeworexist() с указанием «NEW» или «EXISTS» в качестве
‘’’

package com.bofa.sst.batch.core;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.scope.context.StepContext;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.repeat.RepeatStatus;

import java.io.File;
import java.io.FileWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.*;

@RunWith(PowerMockRunner.class)
@PrepareForTest({UdapRequestAggregatorTasklet.class, File.class, FileWriter.class, Files.class})
public class UdapRequestAggregatorTaskletTest {

@Mock
private StepContribution stepContribution;

@Mock
private ChunkContext chunkContext;

@Mock
private ExecutionContext executionContext;

@InjectMocks
private UdapRequestAggregatorTasklet tasklet;

@Mock
private File mockFile;

@Mock
private FileWriter mockFileWriter;

@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
StepExecution stepExecution = mock(StepExecution.class);
StepContext stepContext = mock(StepContext.class);
when(stepContribution.getStepExecution()).thenReturn(stepExecution);
when(chunkContext.getStepContext()).thenReturn(stepContext);
when(stepContext.getStepExecution()).thenReturn(stepExecution);
when(stepExecution.getExecutionContext()).thenReturn(executionContext);

// Mock constructors
PowerMockito.whenNew(File.class).withAnyArguments().thenReturn(mockFile);
PowerMockito.whenNew(FileWriter.class).withAnyArguments().thenReturn(mockFileWriter);

// Mock file operations
when(mockFile.exists()).thenReturn(true);
when(mockFile.delete()).thenReturn(true);
}

@Test
public void testExecute() throws Exception {
// Setup mock behavior
when(executionContext.getString(UdapRequestBatchConstants.DIRECTORY_PATH)).thenReturn("/tmp");
when(executionContext.getString(UdapRequestBatchConstants.EXTENSION)).thenReturn(".txt");

// Mock file writing
doNothing().when(mockFileWriter).write(anyString());
doNothing().when(mockFileWriter).close();

// Mock reading lines from file
PowerMockito.mockStatic(Files.class);
when(Files.readAllLines(any(Path.class))).thenReturn(Arrays.asList("Header", "Data1", "Data2", "Trailer"));

// Mock directory listing
File[] tempFiles = {mockFile};
when(mockFile.listFiles(any((dir, name) -> true))).thenReturn(tempFiles);

// Execute the tasklet
RepeatStatus status = tasklet.execute(stepContribution, chunkContext);

// Validate the result
assertEquals(RepeatStatus.FINISHED, status);

// Verify file interactions
verify(mockFileWriter, times(1)).write("Data1\n");
verify(mockFileWriter, times(1)).write("Data2\n");
verify(mockFileWriter, times(1)).write("Trailer 2\n");
verify(mockFileWriter, times(1)).close();
}
}

‘’’


Подробнее здесь: https://stackoverflow.com/questions/778 ... n-handling
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»