001package org.junit.runner;
002
003import org.junit.runner.notification.RunNotifier;
004
005/**
006 * A <code>Runner</code> runs tests and notifies a {@link org.junit.runner.notification.RunNotifier}
007 * of significant events as it does so. You will need to subclass <code>Runner</code>
008 * when using {@link org.junit.runner.RunWith} to invoke a custom runner. When creating
009 * a custom runner, in addition to implementing the abstract methods here you must
010 * also provide a constructor that takes as an argument the {@link Class} containing
011 * the tests.
012 *
013 * <p>The default runner implementation guarantees that the instances of the test case
014 * class will be constructed immediately before running the test and that the runner
015 * will retain no reference to the test case instances, generally making them
016 * available for garbage collection.
017 *
018 * @see org.junit.runner.Description
019 * @see org.junit.runner.RunWith
020 * @since 4.0
021 */
022public abstract class Runner implements Describable {
023    /*
024     * (non-Javadoc)
025     * @see org.junit.runner.Describable#getDescription()
026     */
027    public abstract Description getDescription();
028
029    /**
030     * Run the tests for this runner.
031     *
032     * @param notifier will be notified of events while tests are being run--tests being
033     * started, finishing, and failing
034     */
035    public abstract void run(RunNotifier notifier);
036
037    /**
038     * @return the number of tests to be run by the receiver
039     */
040    public int testCount() {
041        return getDescription().testCount();
042    }
043}