package org.junit.runner;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
When a class is annotated with @RunWith
or extends a class annotated
with @RunWith
, JUnit will invoke the class it references to run the
tests in that class instead of the runner built into JUnit. We added this feature late
in development. While it seems powerful we expect the runner API to change as we learn
how people really use it. Some of the classes that are currently internal will likely
be refined and become public.
For example, suites in JUnit 4 are built using RunWith, and a custom runner named Suite:
@RunWith(Suite.class)
@SuiteClasses({ATest.class, BTest.class, CTest.class})
public class ABCSuite {
}
Since: 4.0
/**
* When a class is annotated with <code>@RunWith</code> or extends a class annotated
* with <code>@RunWith</code>, JUnit will invoke the class it references to run the
* tests in that class instead of the runner built into JUnit. We added this feature late
* in development. While it seems powerful we expect the runner API to change as we learn
* how people really use it. Some of the classes that are currently internal will likely
* be refined and become public.
*
* For example, suites in JUnit 4 are built using RunWith, and a custom runner named Suite:
*
* <pre>
* @RunWith(Suite.class)
* @SuiteClasses({ATest.class, BTest.class, CTest.class})
* public class ABCSuite {
* }
* </pre>
*
* @since 4.0
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface RunWith {
Returns: a Runner class (must have a constructor that takes a single Class to run)
/**
* @return a Runner class (must have a constructor that takes a single Class to run)
*/
Class<? extends Runner> value();
}