All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.junit.Rule Maven / Gradle / Ivy

Go to download

JUnit is a unit testing framework for Java, created by Erich Gamma and Kent Beck.

There is a newer version: 4.13.2
Show newest version
package org.junit;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Annotates fields that reference rules or methods that return a rule. A field must be public, not
 * static, and a subtype of {@link org.junit.rules.TestRule} (preferred) or
 * {@link org.junit.rules.MethodRule}. A method must be public, not static,
 * and must return a subtype of {@link org.junit.rules.TestRule} (preferred) or
 * {@link org.junit.rules.MethodRule}.
 * 

* The {@link org.junit.runners.model.Statement} passed * to the {@link org.junit.rules.TestRule} will run any {@link Before} methods, * then the {@link Test} method, and finally any {@link After} methods, * throwing an exception if any of these fail. If there are multiple * annotated {@link Rule}s on a class, they will be applied in order of methods first, then fields. * However, if there are multiple fields (or methods) they will be applied in an order * that depends on your JVM's implementation of the reflection API, which is * undefined, in general. Rules defined by fields will always be applied * after Rules defined by methods, i.e. the Statements returned by the former will * be executed around those returned by the latter. * *

Usage

*

* For example, here is a test class that creates a temporary folder before * each test method, and deletes it after each: *

 * public static class HasTempFolder {
 *     @Rule
 *     public TemporaryFolder folder= new TemporaryFolder();
 *
 *     @Test
 *     public void testUsingTempFolder() throws IOException {
 *         File createdFile= folder.newFile("myfile.txt");
 *         File createdFolder= folder.newFolder("subfolder");
 *         // ...
 *     }
 * }
 * 
*

* And the same using a method. *

 * public static class HasTempFolder {
 *     private TemporaryFolder folder= new TemporaryFolder();
 *
 *     @Rule
 *     public TemporaryFolder getFolder() {
 *         return folder;
 *     }
 *
 *     @Test
 *     public void testUsingTempFolder() throws IOException {
 *         File createdFile= folder.newFile("myfile.txt");
 *         File createdFolder= folder.newFolder("subfolder");
 *         // ...
 *     }
 * }
 * 
*

* For more information and more examples, see * {@link org.junit.rules.TestRule}. * *

Ordering

*

* You can use {@link #order()} if you want to have control over the order in * which the Rules are applied. * *

 * public class ThreeRules {
 *     @Rule(order = 0)
 *     public LoggingRule outer = new LoggingRule("outer rule");
 *
 *     @Rule(order = 1)
 *     public LoggingRule middle = new LoggingRule("middle rule");
 *
 *     @Rule(order = 2)
 *     public LoggingRule inner = new LoggingRule("inner rule");
 *
 *     // ...
 * }
 * 
* * @since 4.7 */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.METHOD}) public @interface Rule { int DEFAULT_ORDER = -1; /** * Specifies the order in which rules are applied. The rules with a higher value are inner. * * @since 4.13 */ int order() default DEFAULT_ORDER; }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy