Back to Repositories

Testing Data Conversion and Type Handling in EasyExcel

This test suite validates data conversion functionality in EasyExcel, focusing on reading and writing different file formats (XLSX, XLS, CSV) with various data types and image handling capabilities.

Test Coverage Overview

The test suite provides comprehensive coverage of EasyExcel’s data conversion capabilities.

Key areas tested include:
  • File format compatibility (XLSX, XLS, CSV)
  • Data type conversions (dates, numbers, strings, boolean)
  • Image handling and conversion
  • Custom cell data processing

Implementation Analysis

The testing approach employs JUnit Jupiter for structured test execution with ordered test methods.

Implementation features:
  • BeforeAll setup for test file initialization
  • Separate test cases for each file format
  • Reusable helper methods for common operations
  • Resource cleanup and proper stream handling

Technical Details

Testing infrastructure includes:
  • JUnit Jupiter test framework
  • EasyExcel core libraries
  • Custom utility classes (TestFileUtil, TestUtil)
  • File handling utilities
  • Data conversion listeners

Best Practices Demonstrated

The test suite exemplifies several testing best practices.

Notable examples include:
  • Structured test method organization with clear naming
  • Proper resource management and cleanup
  • Separation of concerns between test data and test logic
  • Comprehensive type conversion validation

alibaba/easyexcel

easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataTest.java

            
package com.alibaba.easyexcel.test.core.converter;

import java.io.File;
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

import com.alibaba.easyexcel.test.util.TestFileUtil;
import com.alibaba.easyexcel.test.util.TestUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.util.FileUtils;

import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;

/**
 * @author Jiaju Zhuang
 */
@TestMethodOrder(MethodOrderer.MethodName.class)
public class ConverterDataTest {

    private static File file07;
    private static File file03;
    private static File fileCsv;
    private static File fileImage07;
    private static File fileImage03;

    @BeforeAll
    public static void init() {
        file07 = TestFileUtil.createNewFile("converter07.xlsx");
        file03 = TestFileUtil.createNewFile("converter03.xls");
        fileCsv = TestFileUtil.createNewFile("converterCsv.csv");
        fileImage07 = TestFileUtil.createNewFile("converterImage07.xlsx");
        fileImage03 = TestFileUtil.createNewFile("converterImage03.xls");
    }

    @Test
    public void t01ReadAndWrite07() throws Exception {
        readAndWrite(file07);
    }

    @Test
    public void t02ReadAndWrite03() throws Exception {
        readAndWrite(file03);
    }

    @Test
    public void t03ReadAndWriteCsv() throws Exception {
        readAndWrite(fileCsv);
    }

    private void readAndWrite(File file) throws Exception {
        EasyExcel.write(file, ConverterWriteData.class).sheet().doWrite(data());
        EasyExcel.read(file, ConverterReadData.class, new ConverterDataListener()).sheet().doRead();
    }

    @Test
    public void t11ReadAllConverter07() {
        readAllConverter("converter" + File.separator + "converter07.xlsx");
    }

    @Test
    public void t12ReadAllConverter03() {
        readAllConverter("converter" + File.separator + "converter03.xls");
    }

    @Test
    public void t13ReadAllConverterCsv() {
        readAllConverter("converter" + File.separator + "converterCsv.csv");
    }

    @Test
    public void t21WriteImage07() throws Exception {
        writeImage(fileImage07);
    }

    @Test
    public void t22WriteImage03() throws Exception {
        writeImage(fileImage03);
    }

    private void writeImage(File file) throws Exception {
        InputStream inputStream = null;
        try {
            List<ImageData> list = new ArrayList<>();
            ImageData imageData = new ImageData();
            list.add(imageData);
            String imagePath = TestFileUtil.getPath() + "converter" + File.separator + "img.jpg";
            imageData.setByteArray(FileUtils.readFileToByteArray(new File(imagePath)));
            imageData.setFile(new File(imagePath));
            imageData.setString(imagePath);
            inputStream = FileUtils.openInputStream(new File(imagePath));
            imageData.setInputStream(inputStream);
            EasyExcel.write(file, ImageData.class).sheet().doWrite(list);
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
        }
    }

    private void readAllConverter(String fileName) {
        EasyExcel.read(TestFileUtil.readFile(fileName), ReadAllConverterData.class, new ReadAllConverterDataListener())
            .sheet().doRead();
    }

    private List<ConverterWriteData> data() throws Exception {
        List<ConverterWriteData> list = new ArrayList<ConverterWriteData>();
        ConverterWriteData converterWriteData = new ConverterWriteData();
        converterWriteData.setDate(TestUtil.TEST_DATE);
        converterWriteData.setLocalDate(TestUtil.TEST_LOCAL_DATE);
        converterWriteData.setLocalDateTime(TestUtil.TEST_LOCAL_DATE_TIME);
        converterWriteData.setBooleanData(Boolean.TRUE);
        converterWriteData.setBigDecimal(BigDecimal.ONE);
        converterWriteData.setBigInteger(BigInteger.ONE);
        converterWriteData.setLongData(1L);
        converterWriteData.setIntegerData(1);
        converterWriteData.setShortData((short)1);
        converterWriteData.setByteData((byte)1);
        converterWriteData.setDoubleData(1.0);
        converterWriteData.setFloatData((float)1.0);
        converterWriteData.setString("测试");
        converterWriteData.setCellData(new WriteCellData<>("自定义"));
        list.add(converterWriteData);
        return list;
    }
}