    001    package org.junit.runner;
    002
    003    import 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     */
    022    public 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    }