2014-01-17 2 views
0

Я читаю файлы ini и передаю их через поставщиков данных для проверки случаев.Как создать новый раздел в dataprovider ini4j

(Поставщик данных считывает этот и возвращает Ini.Section[][] массива Если есть несколько разделов, TestNG проходит тест, который много раз.).

Давайте представим, есть раздел, как это:

[sectionx] 
key1=111 
key2=222 
key3=aaa,bbb,ccc 

Я хочу, в конце концов, прочитать эти данные и выполнить тестовый пример три раза, каждый раз с другим значением key3, остальные ключи являются одинаковыми.

Одним из способов было бы скопировать & вставить раздел столько раз, сколько необходимо ... это явно не идеальное решение.

Путь к его созданию, казалось бы, создаст дополнительные копии раздела, а затем изменит значения ключей на aaa, bbb и ccc. Поставщик данных вернет новый массив, и testng сделает все остальное.

Однако я не могу создать новый экземпляр объекта раздела. Ini.Section - фактически интерфейс; класс реализации org.ini4j.BasicProfileSection не отображается. Кажется, что невозможно создать копию объекта или наследовать класс. Я могу манипулировать существующими объектами этого типа, но не создавать новые. Есть ли способ обойти это?

ответ

0

Кажется, что невозможно создать копии разделов или ini-файлов. Я закончил использовать это обходное решение:

Сначала создайте «пустой» ini-файл, который будет служить своего рода заполнителем. Он будет выглядеть следующим образом:

[env] 
    test1=1 
    test2=2 
    test3=3 

    [1] 
    [2] 
    [3] 

... с достаточно большим числом секций, равных или больших по количеству разделов в других ине файлов.

Во-вторых, прочитайте данные в поставщике данных. Когда есть ключ, который содержит несколько значений, создайте новый объект Ini для каждого значения. Новый объект Ini должен быть создан из нового файлового объекта. (Вы можете читать файл-заполнитель снова и снова, создавая любое количество файлов Ini.)

Наконец, вы должны скопировать содержимое фактического INI-файла в файл-заполнитель.

Следующий код код работает для меня:

public static Ini copyIniFile(Ini originalFile){ 
     Set<Entry<String, Section>> entries = originalFile.entrySet(); 
     Ini emptyFile; 
     try { 
      FileInputStream file = new FileInputStream(new File(EMPTY_DATA_FILE_NAME)); 
      emptyFile = new Ini(file); 
      file.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 

     for(Entry<String, Section> entry : entries){ 
      String key = (String) entry.getKey(); 
      Section section = (Section) entry.getValue(); 
      copySection(key, section, emptyFile); 
     } 

     return emptyFile; 
    } 

    public static Ini.Section copySection(String key, Ini.Section origin, Ini destinationFile){ 
     Ini.Section newSection = destinationFile.get(key); 
     if(newSection==null) throw new IllegalArgumentException(); 
     for(Entry<String, String> entry : origin.entrySet()){ 
      newSection.put(entry.getKey().toString(), entry.getValue().toString()); 
     } 
     return newSection; 
    } 
Смежные вопросы