[Webinar] Streamline your web hosting managementRegister Today

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2565
  • Last Modified:

How do I capture and save the results of a JUnit 4 test suite run?

Hello, I have created a test suite using JUnit 4.  It uses JUnit 4 annotations so it is essentially an empty class that looks like this:

package mypackage;

import org.junit.runners.Suite;

public class MySuite

I'm developing in Eclipse and when I execute this as a JUnit test everything works.  The only problem is that ultimately I want this to run in an automated environment after installation on a machine where there will be no eclipse set up.  Essentially I want to wrap the execution of this test suite in a script (possibly using Ant, not sure yet).  Further, I want to capture the results of each test and store them in an HTML file that I can then look at the results using a browser.

Question: how can I capture the results of the tests in the suite when my test suite class does not even have a body to it?  

I looked into writing a class that extended Runner but without much success.  It seems that I am missing something.  Has anybody else done anything like this?

I have also experimented with building the suite using the JUnit 3 pattern of building a test suite, but that seems to break since my test case classes (TestClass1 and TestClass2) are using JUnit 4 annotations.  JUnit 4 does not seem to like being mixed with JUnit 3.

Thanks in advance,

1 Solution
ant has a task to run junit tests

maybe what you want is a build server, which integrates with ant (and JUnit) and stores the results, etc...

the abstraction of MAVEN is a bit higher than ant (but maven is no build server - a bit like ant, but at a higher level) (OpenSource Software!)

CruiseControl is a build server which integrates with Ant (and therefore JUnit) (OpenSource Software!)

alternative build servers:
continuum (http://maven.apache.org/continuum/) integrates with ant, maven ... OpenSource Software!
anthillAnthill (http://www.anthillpro.com/)
billybobcAuthor Commented:
I found a solution that utilizes the following JUnit classes:


First I created a few support classes:

RegTestResult - this is a simple bean class that contains four fields: String testMethodName,  String description, String failureMessage, long duration.

RegTestRestultRecorder - this class extends org.junit.runner.notification.RunListener and takes an empty Vector<RegTestResult> on construction.  By implementing the testFailure(), testStarted() and testFinished() methods I can capture test results and store them in the Vector<RegTestResult> passed on construction.  

RunSuite - class containing my "main" method.  Instantiates a JUnitCore class to run the JUnit test suite adds a RegTestResultRecorder instance as a RunListener using the addListener() method.  The suite is executed using JUnitCore's run() method.   When the suite is finished, the Vector<RegTestResult> passed to the RegTestResultRecorder on construction, contains the results of all the tests and I can output them in whatever fashion I want.  

My RunSuite.main() method looks like this:

        // Check that at least the test class name is specified.
        if (args.length == 0)
            System.err.println("Usage: java RunSuite <testSuiteClass>");

        String testSuiteClassName = args[0];
        Class testSuiteClass = null;

            testSuiteClass = Class.forName(testSuiteClassName);
        catch (ClassNotFoundException e1)
            System.err.println("Unknown test suite class '" + testSuiteClassName + "'");

        // Create a JUnitCore instance to run the tests with.
        JUnitCore core = new JUnitCore();
        // Create a Vector of RegTestResults in which reg test results will be stored.
        Vector<RegTestResult> testResults = new Vector<RegTestResult>();
        // Add RegTestResultRecorder (which extends RunListener) instance to JUnitCore instance
        // in order to capture test results.
        core.addListener(new RegTestResultRecorder(testResults));

       // Run the test class.  testResults will have the results of all test runs on return.

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now