我想找到一种方法来对作为MultiResourceItemReader的委托编写的自定义ItemReader进行单元测试。

这是我的Spring Batch XML配置文件:

<batch:job id="allegati" incrementer="jobParametersIncrementer">
    <batch:step id="allegati-import">
        <batch:tasklet>
            <batch:chunk reader="allegati-reader" writer="allegati-writer" commit-interval="1"/>
        </batch:tasklet>
    </batch:step>
</batch:job>

<bean id="allegati-reader" class="org.springframework.batch.item.file.MultiResourceItemReader" scope="step">
    <property name="resources" value="file:#{jobParameters['FILEPATH']}/*" />
    <property name="delegate" ref="allegati-filereader" />
</bean>

<bean id="allegati-writer" class="org.springframework.batch.item.database.JpaItemWriter">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<bean id="allegati-filereader" class="it.infogroup.vertenze.porting.reader.AllegatiReader" />

这是我尝试进行的测试(我要测试的类是AllegatiReader):

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:jobAllegati.xml"})
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, StepScopeTestExecutionListener.class})
public class AllegatiTest { 

@Autowired
private JobLauncherTestUtils jobLauncherTestUtils;
@Autowired
private AllegatiReader reader;
@PersistenceContext
protected EntityManager em;

public static final String PARAM_ID = "RUN ID";
public static final String PARAM_FILEPATH = "FILEPATH";
public static final String PARAM_FILEPATH_VALUE = "E:/Test/Vertenze/Porting/Allegati";

public StepExecution getStepExecution() {
    JobParametersBuilder jpb = new JobParametersBuilder();
    jpb.addString(PARAM_FILEPATH, PARAM_FILEPATH_VALUE);
    jpb.addLong(PARAM_ID, System.currentTimeMillis());

    StepExecution execution = MetaDataInstanceFactory.createStepExecution(jpb.toJobParameters());
    return execution;
}

@Test
public void testReader() throws Exception {
    Allegato allegato = reader.read();
    Assert.assertNotNull(allegato);;
}

我的问题是资源(即FILEPATH中存在的文件)没有注入到我的阅读器中。

#1楼 票数:0 已采纳

我猜您正在尝试测试委托阅读器(Class AllegatiReader)? 如果是这样,并且如果要使用自动装配,则需要将multiresourceitemreader用作被测bean

原因

  • multiresourceitemreader创建完整的委托阅读器对象(带有资源集)
  • 不会(不能)将(代理)读取器bean本身作为具有资源的完全配置的读取器提供

  ask by Pietro M. translate from so

未解决问题?本站智能推荐:

1回复

Spring-Batch:测试自定义 itemReader

我正在尝试测试我的自定义 itemReader : 我的测试课看起来像 当我运行测试用例时,该过程失败,因为 fileName 参数为空。 我正在寻找测试 itemReader 的正确方法。 谢谢
1回复

如何为自定义Spring Batch阅读器编写Junit

下面是我自定义的Spring Batch Reader。 我必须编写涵盖setPreparedStatementSetter()和setRowMapper()方法的setPreparedStatementSetter() 。 无论我尝试什么,我的单元测试都不会覆盖这些方法中的代码。 有人可
2回复

此定制阅读器的junit测试用例

我是撰写junit测试用例的新手。 我有一个自定义项目阅读器,它从目录中读取文件并返回pojo。 您能告诉我如何为这个自定义阅读器编写junit测试用例吗? 提前致谢
1回复

对SpringBatch FieldSetMapper进行单元测试

我得到了以下自定义FieldSetMapper 目前,我正在尝试为此映射器编写单元测试。 第一个问题:这合理吗? 第二个问题:我该如何实现?
1回复

动态创建作业的 Spring 批处理测试

在我的应用程序中,我有多个作业所以我创建了动态作业。我在运行这个应用程序时没有问题。 我想对动态创建的作业进行单元测试。 我想将我的工作设置为 JobLauncherTestUtils 。 这就是我初始化 JobLauncherTestUtils 的方式。 当我运行它时,我得到以下错误错误创建
1回复

在JUnit测试案例中触发Spring批处理作业

的背景 : 我目前正在开发一个使用Spring Batch读取一组文件并将文件内容缓存在内存中的应用程序。 然后,缓存的数据由业务逻辑层使用,该业务逻辑层被分为不同的类,每个类都通过使用来自缓存的数据来执行特定的业务功能。 要求 : 我被分配了对业务逻辑层进行单元测试的任务。
1回复

使用@SpringApplicationConfiguration进行JUnit测试会自动启动Job

我正在为春季启动批处理编写Junit测试。 在我的JUnit中,我想以此启动一个步骤: 我的JUnit类用theese注解: 我的问题是,即使测试方法内部没有任何内容,该测试也会像正常方式一样启动我的所有批处理作业。 这是我的BatchConfFile上的注释 然后我
1回复

使用 StepScopeTestExecutionListener.class 对 Step 范围 Bean 进行 JUnit 测试:仍然得到“未注册范围”

我正在尝试为“步骤”范围的 bean 编写一个独立的单元测试用例。 我之前发布了这个问题,并了解我需要使用StepScopeTestExecutionListener为我的单元测试创​​建一个步骤范围; 但是,即使在使用StepScopeTestExecutionListener之后,我仍然收到以下