org.junit.runner.JUnitCore Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of junit Show documentation
Show all versions of junit Show documentation
JUnit is a unit testing framework for Java, created by Erich Gamma and Kent Beck.
package org.junit.runner;
import junit.runner.Version;
import org.junit.internal.JUnitSystem;
import org.junit.internal.RealSystem;
import org.junit.internal.TextListener;
import org.junit.internal.runners.JUnit38ClassRunner;
import org.junit.runner.notification.RunListener;
import org.junit.runner.notification.RunNotifier;
/**
* JUnitCore
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
* java org.junit.runner.JUnitCore TestClass1 TestClass2 ...
.
* 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
* @since 4.0
*/
public class JUnitCore {
private final RunNotifier notifier = new RunNotifier();
/**
* Run the tests contained in the classes named in the args
.
* 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(new RealSystem(), args);
System.exit(result.wasSuccessful() ? 0 : 1);
}
/**
* Run the tests contained in classes
. 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 runClasses(defaultComputer(), classes);
}
/**
* Run the tests contained in classes
. 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 computer Helps construct Runners from classes
* @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(Computer computer, Class... classes) {
return new JUnitCore().run(computer, classes);
}
/**
* @param system
* @param args from main()
*/
Result runMain(JUnitSystem system, String... args) {
system.out().println("JUnit version " + Version.id());
JUnitCommandLineParseResult jUnitCommandLineParseResult = JUnitCommandLineParseResult.parse(args);
RunListener listener = new TextListener(system);
addListener(listener);
return run(jUnitCommandLineParseResult.createRequest(defaultComputer()));
}
/**
* @return the version number of this release
*/
public String getVersion() {
return Version.id();
}
/**
* Run all the tests in classes
.
*
* @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(defaultComputer(), classes);
}
/**
* Run all the tests in classes
.
*
* @param computer Helps construct Runners from classes
* @param classes the classes containing tests
* @return a {@link Result} describing the details of the test run and the failed tests.
*/
public Result run(Computer computer, Class... classes) {
return run(Request.classes(computer, classes));
}
/**
* Run all the tests contained in request
.
*
* @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 test
. 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 JUnit38ClassRunner(test));
}
/**
* Do not use. Testing purposes only.
*/
public Result run(Runner runner) {
Result result = new Result();
RunListener listener = result.createListener();
notifier.addFirstListener(listener);
try {
notifier.fireTestRunStarted(runner.getDescription());
runner.run(notifier);
notifier.fireTestRunFinished(result);
} finally {
removeListener(listener);
}
return result;
}
/**
* 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) {
notifier.addListener(listener);
}
/**
* Remove a listener.
*
* @param listener the listener to remove
*/
public void removeListener(RunListener listener) {
notifier.removeListener(listener);
}
static Computer defaultComputer() {
return new Computer();
}
}