2016-01-11 1 views
0

У меня есть приложение Spring Boot/Batch и вы хотите написать несколько тестов интеграции. Пакет имеет FlatFileItemReader и вставляет файл, который должен быть прочитан через файл конфигурации yml. Вот партия конфигурационный класс:Как я могу ввести значение тестирования для класса конфигурации Spring Batch?

@Configuration 
@EnableBatchProcessing 
public class BatchConfiguration { 

    @Value("${file}") 
    private File file; 

    @Bean 
    public ItemReader<MyClass> reader(LineMapper<MyClass> lineMapper) { 

     FlatFileItemReader<MyClass> flatFileItemReader = new FlatFileItemReader<MyClass>(); 
     flatFileItemReader.setResource(new FileSystemResource(file)); 
     final int NUMBER_OF_HEADER_LINES = 1; 
     flatFileItemReader.setLinesToSkip(NUMBER_OF_HEADER_LINES); 
     flatFileItemReader.setLineMapper(lineMapper); 
     return flatFileItemReader; 
    } 

Интеграция тестовый класс для тестирования читателя:

@SpringApplicationConfiguration(classes = LoadApplication.class) 
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, 
    StepScopeTestExecutionListener.class }) 
@RunWith(SpringJUnit4ClassRunner.class) 
public class StepScopeTestExecutionListenerIntegrationTests { 

    @Autowired 
    private ItemReader<MyClass> reader; 

    @Rule 
    public TemporaryFolder testFolder = new TemporaryFolder(); 

    @Bean 
    public StepExecution getStepExection() { 
     StepExecution execution = MetaDataInstanceFactory.createStepExecution(); 
     return execution; 
    } 

    @Test 
    public void testGoodData() throws Exception { 

     try { 
      File testFile = testFolder.newFile(); 
      PrintWriter writer = new PrintWriter(testFile, "UTF-8"); 
      writer.println("a,b,c"); 
      writer.println("1,2,3"); 
      writer.close(); 
      //ReflectionTestUtils.setField(someObject, "file", testFile); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 

     assertNotNull(reader.read()); 
    } 

} 

В приведенном выше тестовом коде, что должно SomeObject быть установлен? Или есть другой способ вставить тестовый файл?

ответ

0

Читатель уже создан до вызова testGoodData. Просто переопределите ресурс, который был установлен на устройстве чтения.

То есть, заменить

ReflectionTestUtils.setField(someObject, "file", testFile); 

с этой строки кода

reader.setResource(new FileSystemResource(testFile));