Tôi hiện đang viết một loạt các bài kiểm tra trong JUnit. Tôi cần tự động xuất kết quả dưới dạng XML. Tôi đã đọc rằng cách tốt nhất để làm điều này là bằng cách mở rộng lớp RunListener và viết XML theo cách đó. Dưới đây là một mẫu của những gì tôi đã làm cho đến nay, nhưng tôi đang đấu tranh với làm thế nào để trích xuất thông tin về mỗi bài kiểm tra đã được chạy. Lớp 'Mô tả' dường như không có bất kỳ phương thức nhận được hữu ích nào và tôi cảm thấy như tôi có thể đang đi sai hướng này.Cách tốt nhất để tự động tạo kết quả JUnit bằng xml là gì?
Ai đó có thể hỗ trợ cách lấy thông tin hữu ích từ mô tả (ví dụ: kiểm tra đã trôi qua/thất bại, thời gian thử nghiệm, tên thử nghiệm, v.v.) hoặc cho tôi một số lời khuyên về những gì tôi thực sự nên làm?
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);
}
}
CẬP NHẬT - Ant build tập tin
<?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>
Bạn đang sử dụng maven cho dự án của mình? Bạn nhận được các báo cáo chắc chắn miễn phí với maven và các báo cáo này bao gồm các báo cáo XML rất chi tiết. –