我认为问题在于迭代2D数组的方式。
这里有一个更容易完成的方法。
import org.testng.TestNG;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;
import java.util.*;
public class TestClassExample {
public static void main(String[] args) {
String[][] data = new String[][]{
{"class1", "TC_LOGIN"},
{"class2", "TC_LOGIN"},
{"class1", "TC_WORK"}
};
sample(transformToMap(data), Collections.emptyMap());
}
private static Map<String, List<String>> transformToMap(String[][] data) {
Map<String, List<String>> map = new HashMap<>();
for (String[] aData : data) {
String key = aData[1];
List<String> classes = map.computeIfAbsent(key, k -> new ArrayList<>());
classes.add(aData[0]);
}
return map;
}
private static void sample(Map<String, List<String>> dbArr, Map<String, String> parameters) {
//Create an instance on TestNG
TestNG myTestNG = new TestNG();
//Create an instance of XML Suite and assign a name for it.
XmlSuite suite = new XmlSuite();
suite.setName("App Automation Testing");
suite.setParameters(parameters);
dbArr.forEach((key, value) -> {
XmlTest xmlTest = new XmlTest(suite);
xmlTest.setName(key);
value.forEach(eachValue -> {
XmlClass xmlClass = new XmlClass(eachValue, false);
xmlTest.getClasses().add(xmlClass);
});
});
//Add the suite to the list of suites.
List<XmlSuite> suites = new ArrayList<>();
suites.add(suite);
System.out.println(suite.toXml());
//Set the list of Suites to the testNG object you created earlier.
myTestNG.setXmlSuites(suites);
}
}
输出如下:
objc[59296]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/bin/java (0x102a554c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x102ae14e0). One of the two will be used. Which one is undefined.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="App Automation Testing">
<test thread-count="5" name="TC_WORK">
<classes>
<class name="class1"/>
</classes>
</test> <!-- TC_WORK -->
<test thread-count="5" name="TC_LOGIN">
<classes>
<class name="class1"/>
<class name="class2"/>
</classes>
</test> <!-- TC_LOGIN -->
</suite> <!-- App Automation Testing -->
Process finished with exit code 0