Package org.junit.runner

Source Code of org.junit.runner.JUnitCore

package org.junit.runner;

import java.util.ArrayList;
import java.util.List;

import junit.runner.Version;
import org.junit.internal.runners.OldTestClassRunner;
import org.junit.internal.runners.TextListener;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener;
import org.junit.runner.notification.RunNotifier;

/**
* <code>JUnitCore</code> is a facade for running tests. It supports running JUnit 4 tests,
* JUnit 3.8.x tests, and mixtures. To run tests from the command line, run
* <code>java org.junit.runner.JUnitCore TestClass1 TestClass2 ...</code>.
* For one-shot test runs, use the static method {@link #runClasses(Class[])}.
* If you want to add special listeners,
* create an instance of {@link org.junit.runner.JUnitCore} first and use it to run the tests.
*
* @see org.junit.runner.Result
* @see org.junit.runner.notification.RunListener
* @see org.junit.runner.Request
*/
public class JUnitCore {
 
  private RunNotifier fNotifier;

  /**
   * Create a new <code>JUnitCore</code> to run tests.
   */
  public JUnitCore() {
    fNotifier= new RunNotifier();
  }

  /**
   * Run the tests contained in the classes named in the <code>args</code>.
   * If all tests run successfully, exit with a status of 0. Otherwise exit with a status of 1.
   * Write feedback while tests are running and write
   * stack traces for all failed tests after the tests all complete.
   * @param args names of classes in which to find tests to run
   */
  public static void main(String... args) {
    Result result= new JUnitCore().runMain(args);
    killAllThreads(result);
  }

  private static void killAllThreads(Result result) {
    System.exit(result.wasSuccessful() ? 0 : 1);
  }
 
  /**
   * Run the tests contained in <code>classes</code>. Write feedback while the tests
   * are running and write stack traces for all failed tests after all tests complete. This is
   * similar to {@link #main(String[])}, but intended to be used programmatically.
   * @param classes Classes in which to find tests
   * @return a {@link Result} describing the details of the test run and the failed tests.
   */
  public static Result runClasses(Class<?>... classes) {
    return new JUnitCore().run(classes);
  }
 
  /**
   * Do not use. Testing purposes only.
   */
  public Result runMain(String... args) {
    System.out.println("JUnit version " + Version.id());
    List<Class<?>> classes= new ArrayList<Class<?>>();
    List<Failure> missingClasses= new ArrayList<Failure>();
    for (String each : args)
      try {
        classes.add(Class.forName(each));
      } catch (ClassNotFoundException e) {
        System.out.println("Could not find class: " + each);
        Description description= Description.createSuiteDescription(each);
        Failure failure= new Failure(description, e);
        missingClasses.add(failure);
      }
    RunListener listener= new TextListener();
    addListener(listener);
    Result result= run(classes.toArray(new Class[0]));
    for (Failure each : missingClasses)
      result.getFailures().add(each);
    return result;
  }

  /**
   * @return the version number of this release
   */
  public String getVersion() {
    return Version.id();
  }
 
  /**
   * Run all the tests in <code>classes</code>.
   * @param classes the classes containing tests
   * @return a {@link Result} describing the details of the test run and the failed tests.
   */
  public Result run(Class<?>... classes) {
    return run(Request.classes("All", classes));
  }

  /**
   * Run all the tests contained in <code>request</code>.
   * @param request the request describing tests
   * @return a {@link Result} describing the details of the test run and the failed tests.
   */
  public Result run(Request request) {
    return run(request.getRunner());
  }

  /**
   * Run all the tests contained in JUnit 3.8.x <code>test</code>. Here for backward compatibility.
   * @param test the old-style test
   * @return a {@link Result} describing the details of the test run and the failed tests.
   */
  public Result run(junit.framework.Test test) {
    return run(new OldTestClassRunner(test));
  }
 
  /**
   * Do not use. Testing purposes only.
   */
  public Result run(Runner runner) {
    Result result= new Result();
    RunListener listener= result.createListener();
    addFirstListener(listener);
    try {
      fNotifier.fireTestRunStarted(runner.getDescription());
      runner.run(fNotifier);
      fNotifier.fireTestRunFinished(result);
    } finally {
      removeListener(listener);
    }
    return result;
  }
 
  private void addFirstListener(RunListener listener) {
    fNotifier.addFirstListener(listener);
  }
 

  /**
   * Add a listener to be notified as the tests run.
   * @param listener the listener to add
   * @see org.junit.runner.notification.RunListener
   */
  public void addListener(RunListener listener) {
    fNotifier.addListener(listener);
  }

  /**
   * Remove a listener.
   * @param listener the listener to remove
   */
  public void removeListener(RunListener listener) {
    fNotifier.removeListener(listener);
  }
}
TOP

Related Classes of org.junit.runner.JUnitCore

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.