2012-03-05 18 views
7

मैं वर्तमान में जुनीट में परीक्षणों की एक श्रृंखला लिख ​​रहा हूं। मुझे परिणामों को एक्सएमएल के रूप में स्वचालित रूप से निर्यात करने की आवश्यकता है। मैं पढ़ रहा था कि ऐसा करने का सबसे अच्छा तरीका 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> 
+3

आप अपनी परियोजना के लिए Maven का उपयोग कर रहे हैं? आप सुनिश्चित हैं कि मैवेन के साथ मुफ्त में रिपोर्ट करें, और उनमें बहुत विस्तृत XML रिपोर्ट शामिल हैं। –

उत्तर

4

तुम एक चींटी स्क्रिप्ट का उपयोग एक्सएमएल परिणाम

<target name="test" > 

<javac srcdir="/src" 
    destdir="/bin" 
    classpath="/lib/junit.jar" /> 


<junit haltonfailure="false"> 
    <formatter type="xml" /> 
    <batchtest todir="/test-reports"> 
    <fileset dir="/bin" includes="tests/ExampleTest.class" /> 
    </batchtest> 
</junit> 
</target> 

इस/परीक्षण रिपोर्ट फ़ोल्डर में एक xml उत्पन्न होगा प्राप्त करने के लिए कर सकते हैं। चींटी पर अधिक जानकारी बनाता http://ant.apache.org/manual/tasksoverview.html

+0

मैंने यह कोशिश की है लेकिन मुझे क्लास नॉटफाउंड अपवाद प्राप्त है। चींटी कार्य चल रहा है और यह फ़ाइल पा सकता है, लेकिन फिर एक लापता वर्ग के बारे में शिकायत करता है। मैंने इसे ठीक करने का प्रयास किया है लेकिन कोई भाग्य नहीं है। मैंने ऊपर अपनी चींटी बिल्ड फ़ाइल संलग्न की है। – BON

+0

आप पहले जावा फाइल संकलन करने की जरूरत है। मैं अपना जवाब अपडेट करूंगा – outofBounds

संबंधित मुद्दे

 संबंधित मुद्दे