Java Модульный тест для метода, который использует Apache POI - PullRequest
0 голосов
/ 02 марта 2020

У меня нулевой опыт написания юнит-тестов, и мне было поручено написать простой тест для следующего метода:

public void getEventUsageValues() {

    Properties props = new Properties();
    List<String> eventCategory = new ArrayList<String>();
    List<Integer> eventHits = new ArrayList<Integer>();
    List<Integer> eventVisitors = new ArrayList<Integer>();

    try {
        FileInputStream inputStream = new FileInputStream("Path");
        props.load(inputStream);
        String excelFilePath = props.getProperty("EventUsage");
        FileInputStream iStream = new FileInputStream(new File(excelFilePath));

        Workbook workbook = new XSSFWorkbook(iStream);
        Sheet firstSheet = workbook.getSheetAt(0);
        Iterator<Row> iterator = firstSheet.iterator();
        // Skips the header row
        iterator.next();

        // Iterate through the first sheet and get the cell values
        while (iterator.hasNext()) {

            Row nextRow = iterator.next();
            Iterator<Cell> cellIterator = nextRow.cellIterator();

            while (cellIterator.hasNext()) {

                Cell cell = cellIterator.next();
                int columnIndex = cell.getColumnIndex();

                switch (columnIndex) {
                case 0:
                    String category;
                    if ("".equals(cell.getStringCellValue())) {
                        category = "null";
                    } else {
                        category = cell.getStringCellValue();
                    }
                    eventCategory.add(category);
                    eventUsage.setCategory(eventCategory);
                    break;
                case 1:
                    int hits = (int) cell.getNumericCellValue();
                    eventHits.add(hits);
                    eventUsage.setHits(eventHits);
                    break;
                case 2:
                    int visitors = (int) cell.getNumericCellValue();
                    eventVisitors.add(visitors);
                    eventUsage.setVisitors(eventVisitors);
                    break;
                }
            }
        }
        inputStream.close();
        iStream.close();
    } catch (Exception e) {
    }
}

Вышеупомянутый метод используется для загрузки файла Excel и последующего назначения значений в каждом из них. ячейка в строку или целое число, которое затем добавляется в соответствующий массив.
Как я упоминал выше, у меня нулевой опыт написания тестов, поэтому я не уверен, с чего мне начать. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 02 марта 2020

См. Пример создания и чтения электронной таблицы:

package example;

import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;

import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.rules.TemporaryFolder;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.UUID;

import static org.apache.poi.xssf.usermodel.XSSFWorkbookType.XLSX;
import static org.junit.Assert.*;

@Ignore
public class PoiTest
{
    @Rule
    public TemporaryFolder folder= new TemporaryFolder(new File("target"));
    @Test
    public void xlsTest() throws Exception
    {
        File file = new File(folder.getRoot(), UUID.randomUUID() + ".xlxs");
        String cellValue = UUID.randomUUID().toString();
        try (XSSFWorkbook xls = new XSSFWorkbook(XLSX)) {
            xls.createSheet("new sheet").createRow(0).createCell(0).setCellValue(cellValue);
            try(OutputStream out = new FileOutputStream(file)) {xls.write(out);}
        }
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        XSSFWorkbook xls = new XSSFWorkbook(file);
        XSSFSheet worksheet = xls.getSheetAt(0);
        assertEquals("cell value mismatch", cellValue, worksheet.getRow(0).getCell(0).getStringCellValue());
    }
}
...