1package org.junit; 2 3import java.lang.annotation.ElementType; 4import java.lang.annotation.Retention; 5import java.lang.annotation.RetentionPolicy; 6import java.lang.annotation.Target; 7 8/** 9 * Annotates fields that contain rules. Such a field must be public, not 10 * static, and a subtype of {@link org.junit.rules.TestRule}. 11 * The {@link org.junit.runners.model.Statement} passed 12 * to the {@link org.junit.rules.TestRule} will run any {@link Before} methods, 13 * then the {@link Test} method, and finally any {@link After} methods, 14 * throwing an exception if any of these fail. If there are multiple 15 * annotated {@link Rule}s on a class, they will be applied in an order 16 * that depends on your JVM's implementation of the reflection API, which is 17 * undefined, in general. 18 * 19 * For example, here is a test class that creates a temporary folder before 20 * each test method, and deletes it after each: 21 * 22 * <pre> 23 * public static class HasTempFolder { 24 * @Rule 25 * public TemporaryFolder folder= new TemporaryFolder(); 26 * 27 * @Test 28 * public void testUsingTempFolder() throws IOException { 29 * File createdFile= folder.newFile("myfile.txt"); 30 * File createdFolder= folder.newFolder("subfolder"); 31 * // ... 32 * } 33 * } 34 * </pre> 35 * 36 * For more information and more examples, see 37 * {@link org.junit.rules.TestRule}. 38 * 39 * Note: for backwards compatibility, this annotation may also mark 40 * fields of type {@link org.junit.rules.MethodRule}, which will be honored. However, 41 * this is a deprecated interface and feature. 42 */ 43@Retention(RetentionPolicy.RUNTIME) 44@Target({ElementType.FIELD}) 45public @interface Rule { 46 47}