[英]Junit : how to show the report in a Jframe
I have these files in my project : 我的项目中有这些文件:
I run the test in my Main class with : 我在主类中运行测试:
JUnitCore runner = new JUnitCore();
runner.addListener(new TextListener(System.out));
runner.run(AdditionTest.class);
I would like to show this report in a frame, how can I do ? 我想在框架中显示此报告,我该怎么办?
There are several ways that you could do it. 有几种方法可以做到。 One way is to override
RunListener
. 一种方法是重写
RunListener
。 Obviously you will also have to create a JFrame, and I am assuming you just want to display the text, so you need a JTextArea. 显然,您还必须创建一个JFrame,并且我假设您只想显示文本,因此需要一个JTextArea。 After that, you just have the tedious task of implementing all of
RunListener's
methods. 之后,您仅需执行所有
RunListener's
方法的繁琐任务。
Lucky for you: 算你走运:
Main.java: Main.java:
package pack;
import java.awt.Dimension;
import java.text.NumberFormat;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import org.junit.runner.Description;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener;
import crea.AdditionTest;
public class Main extends RunListener
{
private final JTextArea textArea = new JTextArea();
private final String results = new String();
public static void main(String[] args)
{
new Main();
}
public Main()
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
JScrollPane jScrollPane = new JScrollPane(textArea);
jScrollPane.setPreferredSize(new Dimension(500, 500));
JFrame frame = new JFrame("Addition Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(jScrollPane);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
JUnitCore runner = new JUnitCore();
runner.addListener(this);
runner.run(AdditionTest.class);
}
@Override
public void testFinished(Description description) throws Exception
{
super.testFinished(description);
textArea.setText(results);
}
@Override
public void testRunFinished(Result result)
{
printHeader(result.getRunTime());
printFailures(result);
printFooter(result);
}
@Override
public void testStarted(Description description)
{
textArea.append(".");
}
@Override
public void testFailure(Failure failure)
{
textArea.append("E");
}
@Override
public void testIgnored(Description description)
{
textArea.append("I");
}
protected void printHeader(long runTime)
{
textArea.append("\n");
textArea.append("Time: " + elapsedTimeAsString(runTime) + "\n");
}
protected void printFailures(Result result)
{
List<Failure> failures = result.getFailures();
if (failures.size() == 0)
return;
if (failures.size() == 1)
textArea.append("There was " + failures.size() + " failure:" + "\n");
else
textArea.append("There were " + failures.size() + " failures:"
+ "\n");
int i = 1;
for (Failure each : failures)
printFailure(each, "" + i++);
}
protected void printFailure(Failure each, String prefix)
{
textArea.append(prefix + ") " + each.getTestHeader() + "\n");
textArea.append(each.getTrace());
}
protected void printFooter(Result result)
{
if (result.wasSuccessful())
{
textArea.append("\n");
textArea.append("OK");
textArea.append(" (" + result.getRunCount() + " test"
+ (result.getRunCount() == 1 ? "" : "s") + ")" + "\n");
}
else
{
textArea.append("\n");
textArea.append("FAILURES!!!");
textArea.append("Tests run: " + result.getRunCount()
+ ", Failures: " + result.getFailureCount() + "\n");
}
textArea.append("\n");
}
protected String elapsedTimeAsString(long runTime)
{
return NumberFormat.getInstance().format((double) runTime / 1000);
}
}
AdditionTest.java: AdditionTest.java:
package crea;
import org.junit.Assert;
import org.junit.Test;
import pack.Addition;
public class AdditionTest
{
@Test
public void test5s()
{
int b = 5;
for (int a = 10; a < 20; ++a)
Assert.assertEquals(a + b, Addition.add(a, b));
}
@Test
public void test6s()
{
int b = 6;
for (int a = 10; a < 20; ++a)
Assert.assertEquals(a + b, Addition.add(a, b));
}
@Test
public void test2s()
{
int b = 2;
for (int a = 10; a < 20; ++a)
Assert.assertEquals(a + b, Addition.add(a, b));
}
@Test
public void test8s()
{
int b = 8;
for (int a = 10; a < 20; ++a)
Assert.assertEquals(a + b, Addition.add(a, b));
}
}
Addition.java: Addition.java:
package pack;
public class Addition
{
public static int add(int a, int b)
{
if (a == 2 || b == 2)
return -1;
return a + b;
}
}
Cheers :) 干杯:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.