मैं वर्तमान में जुनीट में परीक्षणों की एक श्रृंखला लिख रहा हूं। मुझे परिणामों को एक्सएमएल के रूप में स्वचालित रूप से निर्यात करने की आवश्यकता है। मैं पढ़ रहा था कि ऐसा करने का सबसे अच्छा तरीका RunListener क्लास को विस्तारित करना और एक्सएमएल को इस तरह लिखना है। नीचे मैंने जो किया है उसका एक नमूना नीचे है, लेकिन मैं दौड़ रहा हूं कि प्रत्येक परीक्षण पर जानकारी निकालने के तरीके के साथ संघर्ष कर रहा हूं। 'विवरण' वर्ग में कोई उपयोगी तरीका नहीं लगता है और मुझे लगता है कि मैं शायद इस गलत तरीके से जा रहा हूं।xml में JUnit परिणामों को स्वचालित रूप से उत्पन्न करने का सबसे अच्छा तरीका क्या है?
कोई कैसे वर्णन से उपयोगी जानकारी प्राप्त करने के साथ आपकी सहायता कर सकते हैं (उदाहरण के लिए। परीक्षा उत्तीर्ण/विफल रहा है, परीक्षण, परीक्षण नाम आदि की अवधि) या मुझे मैं वास्तव में क्या करना चाहिए पर कुछ सलाह दे सकता है?
public class XmlListener extends RunListener {
private final PrintStream fWriter;
public XmlListener(JUnitSystem system) {
this(system.out());
}
public XmlListener(PrintStream writer) {
this.fWriter = writer;
}
@Override
public void testRunStarted(Description description) {
fWriter.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
}
@Override
public void testRunFinished(Result result) {
fWriter.append("\t\t</suite>\n");
fWriter.append("\t</suites>\n");
fWriter.append("</result>\n");
printHeader(result.getRunTime());
printFailures(result);
printFooter(result);
}
@Override
public void testStarted(Description description) {
fWriter.append("\t\t\t<case>\n");
fWriter.append("\t\t\t\t<timestamp>" + "</timestamp>\n");
fWriter.append("\t\t\t\t<className>" + "</className>\n");
fWriter.append("\t\t\t\t<testName>" + "</testName>\n");
}
@Override
public void testFinished(Description description) {
fWriter.append("\t\t\t\t<duration>" + "</duration>\n");
fWriter.append("\t\t\t</case>\n");
Iterator it = description.getAnnotations().iterator();
while (it.hasNext()) {
fWriter.append(it.next().toString());
}
}
@Override
public void testFailure(Failure failure) {
fWriter.append('E');
}
@Override
public void testIgnored(Description description) {
fWriter.append('I');
}
/**
* private methods
* @return
*/
private PrintStream getWriter() {
return fWriter;
}
protected void printHeader(long runTime) {
getWriter().println();
getWriter().println("Time: " + elapsedTimeAsString(runTime));
}
protected void printFailures(Result result) {
List<Failure> failures= result.getFailures();
if (failures.size() == 0)
return;
if (failures.size() == 1)
getWriter().println("There was " + failures.size() + " failure:");
else
getWriter().println("There were " + failures.size() + " failures:");
int i= 1;
for (Failure each : failures)
printFailure(each, "" + i++);
}
protected void printFailure(Failure each, String prefix) {
getWriter().println(prefix + ") " + each.getTestHeader());
getWriter().print(each.getTrace());
}
protected void printFooter(Result result) {
if (result.wasSuccessful()) {
getWriter().println();
getWriter().println("\t</suites>\n");
getWriter().println("</result>\n");
getWriter().println(" (" + result.getRunCount() + " test" + (result.getRunCount() == 1 ? "" : "s") + ")");
} else {
getWriter().println();
getWriter().println("FAILURES!!!");
getWriter().println("Tests run: " + result.getRunCount() + ", Failures: " + result.getFailureCount());
}
getWriter().println();
}
/**
* Returns the formatted string of the elapsed time. Duplicated from
* BaseTestRunner. Fix it.
*/
protected String elapsedTimeAsString(long runTime) {
return NumberFormat.getInstance().format((double) runTime/1000);
}
}
अद्यतन - चींटी निर्माण फ़ाइल
<?xml version="1.0" encoding="UTF-8"?>
<project name="COTPlus" default="main" basedir=".">
<property name="src.dir" location="src" />
<target name="test" >
<junit printsummary="on" haltonfailure="false">
<formatter type="xml" />
<batchtest todir="/test-reports">
<fileset dir="${src.dir}" includes="**/ExampleTest.java" />
</batchtest>
</junit>
</target>
<target name="main" depends="test">
<description>Main target</description>
<echo>${src.dir}</echo>
</target>
</project>
आप अपनी परियोजना के लिए Maven का उपयोग कर रहे हैं? आप सुनिश्चित हैं कि मैवेन के साथ मुफ्त में रिपोर्ट करें, और उनमें बहुत विस्तृत XML रिपोर्ट शामिल हैं। –