简体   繁体   English

Junit:如何在Jframe中显示报告

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM