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

org.junit.jupiter.params.provider.MethodSource Maven / Gradle / Ivy

There is a newer version: 5.11.0
Show newest version
/*
 * Copyright 2015-2018 the original author or authors.
 *
 * All rights reserved. This program and the accompanying materials are
 * made available under the terms of the Eclipse Public License v2.0 which
 * accompanies this distribution and is available at
 *
 * http://www.eclipse.org/legal/epl-v20.html
 */

package org.junit.jupiter.params.provider;

import static org.apiguardian.api.API.Status.EXPERIMENTAL;

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

import org.apiguardian.api.API;
import org.junit.jupiter.params.ParameterizedTest;

/**
 * {@code @MethodSource} is an {@link ArgumentsSource} which provides access
 * to values returned from {@linkplain #value() factory methods} of the class in
 * which this annotation is declared or from static factory methods in external
 * classes referenced by fully qualified method name.
 *
 * 

Each factory method must generate a stream of arguments, * and each set of arguments within the stream will be provided as the physical * arguments for individual invocations of the annotated * {@link ParameterizedTest @ParameterizedTest} method. Generally speaking this * translates to a {@link java.util.stream.Stream Stream} of {@link Arguments} * (i.e., {@code Stream}); however, the actual concrete return type * can take on many forms. In this context, a "stream" is anything that JUnit * can reliably convert into a {@code Stream}, such as * {@link java.util.stream.Stream Stream}, * {@link java.util.stream.DoubleStream DoubleStream}, * {@link java.util.stream.LongStream LongStream}, * {@link java.util.stream.IntStream IntStream}, * {@link java.util.Collection Collection}, * {@link java.util.Iterator Iterator}, * {@link Iterable}, an array of objects, or an array of primitives. The * "arguments" within the stream can be supplied as an instance of * {@link Arguments}, an array of objects (e.g., {@code Object[]}), or a single * value if the parameterized test method accepts a single argument. * *

Examples

* *

The following table displays compatible method signatures for parameterized * test methods and their corresponding factory methods. * *

* * * * * * * * * *
{@code @ParameterizedTest} methodFactory method
{@code void test(int)}{@code static int[] factory()}
{@code void test(int)}{@code static IntStream factory()}
{@code void test(String)}{@code static String[] factory()}
{@code void test(String)}{@code static List factory()}
{@code void test(String)}{@code static Stream factory()}
{@code void test(String, int)}{@code static Object[][] factory()}
{@code void test(String, int)}{@code static Stream factory()}
{@code void test(String, int)}{@code static Stream factory()}
* *

Factory methods within the test class must be {@code static} unless the * {@link org.junit.jupiter.api.TestInstance.Lifecycle#PER_CLASS PER_CLASS} * test instance lifecycle mode is used; whereas, factory methods in external * classes must always be {@code static}. In any case, factory methods must not * declare any parameters. * * @since 5.0 * @see Arguments * @see ArgumentsSource * @see ParameterizedTest * @see org.junit.jupiter.api.TestInstance */ @Target({ ElementType.ANNOTATION_TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented @API(status = EXPERIMENTAL, since = "5.0") @ArgumentsSource(MethodArgumentsProvider.class) public @interface MethodSource { /** * The names of factory methods within the test class or in external classes * to use as sources for arguments. * *

Factory methods in external classes must be referenced by fully * qualified method name — for example, * {@code com.example.StringsProviders#blankStrings}. * *

If no factory method names are declared, a method within the test class * that has the same name as the test method will be used as the factory * method by default. * *

For further information, see the {@linkplain MethodSource class-level JavaDoc}. */ String[] value() default ""; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy