private void testReadWrite0(
      final String writeResource,
      final String start,
      final String end,
      final Class<?> beanType,
      final String expect,
      final String forbid)
      throws Exception {
    final Properties params =
        CsvItemReaderWriterTest.createParams(CsvProperties.BEAN_TYPE_KEY, beanType.getName());
    final File writeResourceFile = new File(CsvItemReaderWriterTest.tmpdir, writeResource);
    params.setProperty("writeResource", writeResourceFile.getPath());
    params.setProperty(CsvProperties.CELL_PROCESSORS_KEY, cellProcessors);

    if (start != null) {
      params.setProperty(CsvProperties.START_KEY, start);
    }
    if (end != null) {
      params.setProperty(CsvProperties.END_KEY, end);
    }
    if (this.partialNameMapping != null) {
      params.setProperty(CsvProperties.NAME_MAPPING_KEY, partialNameMapping);
    }
    params.setProperty(CsvProperties.HEADER_KEY, header);
    CsvItemReaderWriterTest.setRandomWriteMode(params);

    final long jobExecutionId = jobOperator.start(jobName, params);
    final JobExecutionImpl jobExecution =
        (JobExecutionImpl) jobOperator.getJobExecution(jobExecutionId);
    jobExecution.awaitTermination(CsvItemReaderWriterTest.waitTimeoutMinutes, TimeUnit.MINUTES);
    Assert.assertEquals(BatchStatus.COMPLETED, jobExecution.getBatchStatus());

    CsvItemReaderWriterTest.validate(writeResourceFile, expect, forbid);
  }