【问题标题】:How to create a new Section in the dataprovider ini4j如何在数据提供者 ini4j 中创建新部分
【发布时间】:2014-01-17 16:17:37
【问题描述】:

我正在读取 ini 文件并通过数据提供者将它们传递给测试用例。

(数据提供者读取这些并返回一个Ini.Section[][] 数组。如果有多个部分,testng 会多次运行测试。)

假设有这样一个部分:

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

最后我想要的是读取这些数据并执行测试用例三次,每次使用不同的key3值,其他键相同。

一种方法是根据需要多次复制和粘贴该部分...这显然不是一个理想的解决方案。

解决方法似乎是创建该部分的更多副本,然后将键值更改为aaabbbccc。数据提供者将返回新数组,而 testng 将完成剩下的工作。

但是,我似乎无法创建 section 对象的新实例。 Ini.Section 实际上是一个接口;实现类org.ini4j.BasicProfileSection 不可见。似乎无法创建对象的副本或继承该类。我只能操作这种类型的现有对象,但不能创建新对象。有什么办法解决吗?

【问题讨论】:

    标签: java testng ini4j


    【解决方案1】:

    似乎无法创建节或 ini 文件的副本。我最终使用了这个解决方法:

    首先创建一个“空”ini 文件,它将用作一种占位符。它看起来像这样:

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

    ...具有足够多的节数,等于或大于其他 ini 文件中的节数。

    其次,读取数据提供者中的数据。当一个键包含多个值时,为每个值创建一个新的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;
        }
    

    【讨论】:

      猜你喜欢
      • 2017-01-08
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 2019-11-24
      • 2018-02-02
      • 2011-02-18
      • 1970-01-01
      • 2013-03-04
      相关资源
      最近更新 更多