gpt4 book ai didi

java - 如何根据 JUNIT 的结果生成 XML 并配置 ant 来使用它?

转载 作者:行者123 更新时间:2023-12-01 12:27:11 24 4
gpt4 key购买 nike

我是 JUNIT 新手,被困在这里。我正在尝试以编程方式生成报告。如何根据 JUNIT 测试获得的结果创建 XML。我愿意使用 ant,但老实说,我不确定如何首先在我的项目中配置 ANT。请找到我的 JSP 的以下代码,我可以在其中获取结果。我想将这些结果转换为 XML 形式。如何将结果解析为 XML。非常感谢任何帮助..

TestJUnit.JSP

<%@page import="java.io.ByteArrayOutputStream"%>
<%@page import="java.io.PrintStream"%>
<%@page import="org.junit.runner.notification.RunListener"%>
<%@page import="java.io.BufferedWriter"%>
<%@page import="java.io.FileWriter"%>
<%@page import="java.io.File"%>
<%@page import="java.io.PrintWriter"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" errorPage="error.jsp"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="org.junit.runner.JUnitCore"%>
<%@ page import="org.junit.runner.Result"%>
<%@ page import="com.test.service.ejb.session.ServiceRemote"%>
<%@ page import="com.test.service.ejb.session.MasterDataServiceRemote"%>
<%@ page import="java.util.List"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="org.apache.log4j.Logger"%>
<%@ page import="test.com.test.service.ejb.session.AllEJBJunitTests"%>
<%@ page import="test.com.test.service.ejb.session.EGDSVJunitListener"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Test Runner</title>
</head>
<body>
<%
System.out.print("Test");
Logger logger = Logger.getLogger("TestJunit.jsp");
logger.debug("Calling Junit");
JUnitCore junit = new JUnitCore();
Class[] tests = { AllEJBJunitTests.class};
Result result= junit.runClasses(tests);

ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
junit.addListener(new TextListener(ps));
junit.run(AllEJBJunitTests.class);
response.setHeader("value", new String(baos.toByteArray(), "UTF-8"));
logger.debug("Stop Junit"+ result.getRunCount());



%>
</body>
</html>

TextListener.java

package test.com.egdsv.service.ejb.session;

import java.io.PrintStream;
import java.text.NumberFormat;
import java.util.List;

import org.junit.internal.JUnitSystem;
import org.junit.runner.Description;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener;

public class TextListener extends RunListener {

private final PrintStream writer;


public TextListener(JUnitSystem system) {
this(system.out());
}

public TextListener(PrintStream writer) {
this.writer = writer;
}

@Override
public void testRunFinished(Result result) {
printHeader(result.getRunTime());
printFailures(result);
printFooter(result);
}

@Override
public void testStarted(Description description) {
writer.append('.');
}

@Override
public void testFailure(Failure failure) {
writer.append('E');
}

@Override
public void testIgnored(Description description) {
writer.append('I');
}

/*
* Internal methods
*/

private PrintStream getWriter() {
return writer;
}

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().print("OK");
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 而无需付出任何努力,我建议您看看 XStream -> http://x-stream.github.io/tutorial.html

(请记住,您可以创建一个新的“包装器”类,该类仅保存报表对象的有趣部分和“说得好”字段名,然后序列化该类。)

不幸的是,当涉及到非常复杂的结构时,XStream 有其局限性,我猜 JAXB 及其定义(ObjectFactorys 和其他东西)会在如何编码/解码对象方面发挥作用。

另一种可能性是有一个简单的“XML 转换器”,它可以像这样打印,有时是获得所需 XML 输出的最快方法(特别是如果您只需要一个快速且简单的解决方案)。

StringBuffer b = new StringBuffer();
b.append("<TestResult>");
for(Result tmpRes : results){
b.append("<TestResult><TestCaseName>");
b.append(tmpRes.getTestCaseName());
b.append("</TestCaseName>");
...
}
b.appebnd("</TestResult");

上面的代码只是显示快速方法,我假设 Result 类不会有方法 getTestCaseName() 但我想你明白我的意思;)

(我可能完全误解了你,因为我没有看到 Ant 的链接。请原谅我)

关于java - 如何根据 JUNIT 的结果生成 XML 并配置 ant 来使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26236419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com