package org.junit.experimental.theories; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * Annotating an field or method with @DataPoint will cause the field value * or the value returned by the method to be used as a potential parameter for * theories in that class, when run with the * {@link org.junit.experimental.theories.Theories Theories} runner. * <p> * A DataPoint is only considered as a potential value for parameters for * which its type is assignable. When multiple {@code DataPoint}s exist * with overlapping types more control can be obtained by naming each DataPoint * using the value of this annotation, e.g. with * <code>@DataPoint({"dataset1", "dataset2"})</code>, and then specifying * which named set to consider as potential values for each parameter using the * {@link org.junit.experimental.theories.FromDataPoints @FromDataPoints} * annotation. * <p> * Parameters with no specified source (i.e. without @FromDataPoints or * other {@link org.junit.experimental.theories.ParametersSuppliedBy * @ParameterSuppliedBy} annotations) will use all {@code DataPoint}s that are * assignable to the parameter type as potential values, including named sets of * {@code DataPoint}s. * * <pre> * @DataPoint * public static String dataPoint = "value"; * * @DataPoint("generated") * public static String generatedDataPoint() { * return "generated value"; * } * * @Theory * public void theoryMethod(String param) { * ... * } * </pre> * * @see org.junit.experimental.theories.Theories * @see org.junit.experimental.theories.Theory * @see org.junit.experimental.theories.DataPoint * @see org.junit.experimental.theories.FromDataPoints */ @Retention(RetentionPolicy.RUNTIME) @Target({FIELD, METHOD}) public @interface DataPoint { String[] value() default {}; Class<? extends Throwable>[] ignoredExceptions() default {}; }