1 package org.junit.runner;
2 
3 import org.junit.runner.notification.RunNotifier;
4 
5 /**
6  * A <code>Runner</code> runs tests and notifies a {@link org.junit.runner.notification.RunNotifier}
7  * of significant events as it does so. You will need to subclass <code>Runner</code>
8  * when using {@link org.junit.runner.RunWith} to invoke a custom runner. When creating
9  * a custom runner, in addition to implementing the abstract methods here you must
10  * also provide a constructor that takes as an argument the {@link Class} containing
11  * the tests.
12  *
13  * <p>The default runner implementation guarantees that the instances of the test case
14  * class will be constructed immediately before running the test and that the runner
15  * will retain no reference to the test case instances, generally making them
16  * available for garbage collection.
17  *
18  * @see org.junit.runner.Description
19  * @see org.junit.runner.RunWith
20  * @since 4.0
21  */
22 public abstract class Runner implements Describable {
23     /*
24      * (non-Javadoc)
25      * @see org.junit.runner.Describable#getDescription()
26      */
27     public abstract Description getDescription();
28 
29     /**
30      * Run the tests for this runner.
31      *
32      * @param notifier will be notified of events while tests are being run--tests being
33      * started, finishing, and failing
34      */
35     public abstract void run(RunNotifier notifier);
36 
37     /**
38      * @return the number of tests to be run by the receiver
39      */
40     public int testCount() {
41         return getDescription().testCount();
42     }
43 }
44