Как правильно привести ExplicitListValues ​​из apache POI dataValidators для тестирования? - PullRequest
0 голосов
/ 23 января 2019

Я добавил dataConstraints на лист своей рабочей книги Apache POI.А теперь я хочу добавить модульный тест.

Мое ограничение - это простой список двух значений: "да" и "нет".

моя текущая попытка:

Assert.assertEquals(
  Arrays.toString("yes,no".split(",")),
  Arrays.toString(dv.get(0).getValidationConstraint().getExplicitListValues()));
}

Сбой при

expected:<[[yes, no]]> but was:<[["yes, no"]]

Я почти уверен, что упускаю что-то очевидное в логике типизации Java, но не могу понять, что именно.

- правка 1:

Я пытался создать список как

XSSFDataValidationConstraint c =
  (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(
  new String[]{"yes", "no"});

и

XSSFDataValidationConstraint c =
  (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(
  "yes,no".split(","));

, это не имеет значения, выход Arrays.toString( ...getExplicitListValues()) всегда будет показывать дополнительные кавычки!

- edit2:

Чтобы попытаться выяснить это, я создал список так, как подсказывает @ axel-ichter:

XSSFDataValidationConstraint c =
  (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(
  "\"yes,no".split(","));

А потом я получаючто-то еще:

expected:<[[yes, no]]> but was:<[[""yes, no"]]>

- редактировать 3

ArrayUtils.contains( ....getExplicitListValues(), "yes") // returns null;

...getExplicitListValues().getClass().getTypeName() // java.lang.String[]

1 Ответ

0 голосов
/ 23 января 2019

Невозможно воспроизвести вашу проблему.Используя apache poi 4.0.1 следующий код:

import java.io.FileOutputStream;
import java.io.FileInputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddressList;
import java.util.List;
import java.util.Arrays;

class CreateExcelDataValidationLists {

 public static void main(String[] args) throws Exception {

  Workbook workbook = new XSSFWorkbook();
  Sheet sheet = workbook.createSheet("Sheet1");
  DataValidationHelper dvHelper = sheet.getDataValidationHelper();
  String constraint = "yes,no";
  DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint(constraint.split(",")) ;
  CellRangeAddressList addressList = new CellRangeAddressList(0,0,0,0);          
  DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);
  sheet.addValidationData(validation);

  FileOutputStream out = new FileOutputStream("CreateExcelDataValidationLists.xlsx");
  workbook.write(out);
  out.close();
  workbook.close();

  Thread.sleep(1000);

  workbook = WorkbookFactory.create(new FileInputStream("CreateExcelDataValidationLists.xlsx"));
  sheet = workbook.getSheetAt(0);

  @SuppressWarnings("unchecked")
  List<DataValidation> validations = (List<DataValidation>)sheet.getDataValidations();

  System.out.println(Arrays.toString(validations.get(0).getValidationConstraint().getExplicitListValues()));

 }
}

Производит:

[yes, no]

Только что протестировано.Тот же код, использующий apache poi 3.14, действительно выдает

["yes, no"]
...