我正在读取ini文件并通过数据提供程序将它们传递给测试用例。
(数据提供者读取这些并返回Ini.Section[][]
数组。如果有多个部分,testng会多次运行测试。)
让我们假设有一个这样的部分:
[sectionx]
key1=111
key2=222
key3=aaa,bbb,ccc
最终,我想读取这些数据并执行测试用例三次,每次使用不同的key3值,其他键是相同的。
一种方法是根据需要多次复制和粘贴该部分......这显然不是理想的解决方案。
实现这一目标的方法似乎是创建该部分的更多副本,然后将关键值更改为aaa
,bbb
和ccc
。数据提供程序将返回新数组,testng将完成剩下的工作。
但是,我似乎无法创建节对象的新实例。 Ini.Section实际上是一个界面;实施班org.ini4j.BasicProfileSection
不可见。似乎无法创建对象的副本或继承该类。我只能操纵这种类型的现有对象,但不能创建新对象。有什么方法吗?
答案 0 :(得分:0)
似乎无法创建部分或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;
}