The problem seems to be tied down to your code.
When you create an XmlTest object you also need to ensure that you associate the XmlTest object to a particular suite using setSuite() method.
You dont seem to have done that.
package rationale.emotions;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.testng.TestNG;
import org.testng.xml.*;
public class Runner {
public TestNG tng = new TestNG();
public XmlSuite suite = new XmlSuite();
public void runSuite(XmlSuite suite) {
ArrayList<XmlSuite> suites = new ArrayList<XmlSuite>();
suites.add(suite);
tng.setXmlSuites(suites);
tng.run();
}
public void runSuite() {
ArrayList<XmlSuite> suites = new ArrayList<XmlSuite>();
suites.add(suite);
System.out.println(suite.toXml());
tng.setXmlSuites(suites);
tng.run();
}
public static void main(String[] args) {
Runner runner = new Runner();
HashMap<String, String> parameters = null;
runner.createVirtualSuite(parameters);
runner.runSuite();
}
public void createVirtualSuite(HashMap<String,String> parameters) {
String suiteName = "Bluefin runner";
suite.addTest(test);
}
public XmlTest setTestXml() {
XmlTest xmlTest = new XmlTest();
xmlTest.setName("Bluefin Test");
HashMap<String, ArrayList<String>> testMethodMap = new HashMap<String, ArrayList<String>>();
ArrayList<String> testmethods = new ArrayList<String>();
Set<String> stClass = testMethodMap.keySet();
Iterator<String> it = stClass.iterator();
List<XmlClass> classes = new ArrayList<XmlClass>();
while(it.hasNext()) {
String testClassName = it.next();
XmlClass xmlcls = new XmlClass(testClassName);
ArrayList<String> methodslist = testMethodMap.get(testClassName);
ArrayList<XmlInclude> methodsToRun = new ArrayList<XmlInclude>();
for(String m: methodslist) {
methodsToRun.add(new XmlInclude(m));
}
xmlcls.setIncludedMethods(methodsToRun);
classes.add(xmlcls);
xmlTest.setXmlClasses(classes) ;
}
xmlTest.setVerbose(2);
return xmlTest;
}
}
<suite name="Bluefin runner">
<test verbose="2" name="Bluefin Test">
<classes>
<class name="rationale.emotions.MyTestClass">
<methods>
<include name="foo"/>
</methods>
</class> <!-- rationale.emotions.MyTestClass -->
</classes>
</test> <!-- Bluefin Test -->
</suite> <!-- Bluefin runner -->
[TestNG] Running:
Command line suite
foo says hello
PASSED: foo
===============================================
Bluefin Test
Tests run: 1, Failures: 0, Skips: 0
===============================================
===============================================
Bluefin runner
Total tests run: 1, Failures: 0, Skips: 0
===============================================
[TestNG] Time taken by org.testng.reporters.XMLReporter@59c9b9ca: 16 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@33bfc93a: 5 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@3daa57fb: 45 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@7ca3d4cf: 3 ms
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@2d20cc56: 28 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 1 ms