org.junit.jupiter.api.TestInfo Maven / Gradle / Ivy
Show all versions of junit-jupiter-api Show documentation
/*
* Copyright 2015-2024 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
*
* https://www.eclipse.org/legal/epl-v20.html
*/
package org.junit.jupiter.api;
import static org.apiguardian.api.API.Status.STABLE;
import java.lang.reflect.Method;
import java.util.Optional;
import java.util.Set;
import org.apiguardian.api.API;
/**
* {@code TestInfo} is used to inject information about the current test or
* container into to {@code @Test}, {@code @RepeatedTest},
* {@code @ParameterizedTest}, {@code @TestFactory}, {@code @BeforeEach},
* {@code @AfterEach}, {@code @BeforeAll}, and {@code @AfterAll} methods.
*
* If a method parameter is of type {@link TestInfo}, JUnit will supply
* an instance of {@code TestInfo} corresponding to the current test or
* container as the value for the parameter.
*
* @since 5.0
* @see Test
* @see RepeatedTest
* @see TestFactory
* @see BeforeEach
* @see AfterEach
* @see BeforeAll
* @see AfterAll
* @see DisplayName
* @see Tag
*/
@API(status = STABLE, since = "5.0")
public interface TestInfo {
/**
* Get the display name of the current test or container.
*
*
The display name is either a default name or a custom name configured
* via {@link DisplayName @DisplayName}.
*
*
Default Display Names
*
* If the context in which {@code TestInfo} is used is at the container
* level, the default display name is generated based on the name of the
* test class. For top-level and {@link Nested @Nested} test classes, the
* default display name is the {@linkplain Class#getSimpleName simple name}
* of the class. For {@code static} nested test classes, the default display
* name is the default display name for the enclosing class concatenated with
* the {@linkplain Class#getSimpleName simple name} of the {@code static}
* nested class, separated by a dollar sign ({@code $}). For example, the
* default display names for the following test classes are
* {@code TopLevelTests}, {@code NestedTests}, and {@code TopLevelTests$StaticTests}.
*
*
* class TopLevelTests {
*
* {@literal @}Nested
* class NestedTests {}
*
* static class StaticTests {}
* }
*
*
* If the context in which {@code TestInfo} is used is at the test level,
* the default display name is the name of the test method concatenated with
* a comma-separated list of {@linkplain Class#getSimpleName simple names}
* of the parameter types in parentheses. For example, the default display
* name for the following test method is {@code testUser(TestInfo, User)}.
*
*
* {@literal @}Test
* void testUser(TestInfo testInfo, {@literal @}Mock User user) {}
*
*
* Note that display names are typically used for test reporting in IDEs
* and build tools and may contain spaces, special characters, and even emoji.
*
* @return the display name of the test or container; never {@code null} or blank
*/
String getDisplayName();
/**
* Get the set of all tags for the current test or container.
*
*
Tags may be declared directly on the test element or inherited
* from an outer context.
*/
Set getTags();
/**
* Get the {@link Class} associated with the current test or container, if available.
*/
Optional> getTestClass();
/**
* Get the {@link Method} associated with the current test or container, if available.
*/
Optional getTestMethod();
}