Las siguientes anotaciones se admiten cuando se usan en combinación con SpringExtension y JUnit Jupiter (es decir, el modelo de programación en JUnit 5):

@SpringJUnitConfig

@SpringJUnitConfig es una anotación compuesta que combina @ExtendWith(SpringExtension.class) de JUnit Jupiter con @ContextConfiguration de Spring TestContext Framework. Se puede utilizar a nivel de clase como reemplazo de @ContextConfiguration. En cuanto a las opciones de configuración, la única diferencia entre las anotaciones @ContextConfiguration y @SpringJUnitConfig es que en la anotación @SpringJUnitConfig, las clases de componentes se pueden declarar con un atributo value

El siguiente ejemplo muestra cómo utilizar la anotación @SpringJUnitConfig para especificar una clase de configuración:

Java

@SpringJUnitConfig(TestConfig.class) 
class ConfigurationClassJUnitJupiterSpringTests {
    // cuerpo de clase...
} 
  1. Establezca la clase de configuración.
Kotlin

@SpringJUnitConfig(TestConfig::class) 
class ConfigurationClassJUnitJupiterSpringTests {
    // cuerpo de clase...
}
  1. Establezca la clase de configuración.

El siguiente ejemplo muestra cómo utilizar el @SpringJUnitConfig anotación para establecer la ubicación del archivo de configuración:

Java

@SpringJUnitConfig(locations = "/test-config.xml") 
class XmlJUnitJupiterSpringTests {
    // cuerpo de clase...
}
  1. Establezca la ubicación del archivo de configuración.
Kotlin

@SpringJUnitConfig(locations = ["/test-config.xml"]) 
class XmlJUnitJupiterSpringTests {
    // cuerpo de clase...
}
  1. Establezca la ubicación del archivo de configuración.

Para obtener más información, consulte "Context Management", así como en el javadoc en @SpringJUnitConfig y @ContextConfiguration.

@SpringJUnitWebConfig

@SpringJUnitWebConfig es una anotación compuesta que combina la anotación @ExtendWith(SpringExtension.class) de JUnit Jupiter con las anotaciones @ContextConfiguration y @WebAppConfiguration de Spring Marco de contexto de prueba. Se puede utilizar a nivel de clase como reemplazo de las anotaciones @ContextConfiguration y @WebAppConfiguration. En cuanto a las opciones de configuración, la única diferencia entre las anotaciones @ContextConfiguration y @SpringJUnitWebConfig es que en la anotación @SpringJUnitWebConfig, las clases de componentes se pueden declarar con utilizando el atributo value. Además, el atributo de valor de la anotación @WebAppConfiguration solo se puede anular utilizando el atributo ResourcePath en la anotación @SpringJUnitWebConfig.

El siguiente ejemplo muestra cómo utilizar la anotación @SpringJUnitWebConfig para establecer la clase de configuración:

Java

@SpringJUnitWebConfig(TestConfig.class) 
class ConfigurationClassJUnitJupiterSpringWebTests {
    // cuerpo de la clase...
}
  1. Establece la clase de configuración.
Kotlin

@SpringJUnitWebConfig(TestConfig::class) 
class ConfigurationClassJUnitJupiterSpringWebTests {
    // cuerpo de la clase...
}
  1. Establecer la clase de configuración.

El siguiente ejemplo muestra cómo utilizar la anotación @SpringJUnitWebConfig para establecer la ubicación del archivo de configuración. :

Java

@SpringJUnitWebConfig(locations = "/test-config.xml") 
class XmlJUnitJupiterSpringWebTests {
    // cuerpo de la clase...
}
  1. Establezca el ubicación del archivo de configuración.
Kotlin

@SpringJUnitWebConfig(locations = ["/test-config.xml"]) 
class XmlJUnitJupiterSpringWebTests {
    // cuerpo de la clase...
}
  1. Establezca la ubicación del archivo de configuración.

Para obtener más información, consulte "Context Management", así como en javadoc en @SpringJUnitWebConfig, @ContextConfiguration y @WebAppConfiguration.

@TestConstructor

@TestConstructor es una anotación de nivel de tipo que se utiliza para configurar cómo los parámetros del constructor de la clase de prueba se determinarán y vincularán automáticamente desde los componentes en el ApplicationContext de la prueba.

Si la anotación @TestConstructor no está presente o está presente a través de una metaanotación en la clase de prueba, se utilizará el modo de enlace y detección del constructor de pruebas predeterminado. Para obtener detalles sobre cómo cambiar el modo predeterminado, consulte el consejo a continuación. Sin embargo, tenga en cuenta que la declaración local de la anotación @Autowired para un constructor tiene prioridad sobre la anotación @TestConstructor y el modo predeterminado.

Cambiar el modo de enlace y descubrimiento automático del constructor de pruebas predeterminado

Descubrimiento automático del constructor de pruebas y modo de enlace el valor predeterminado se puede cambiar estableciendo la propiedad del sistema spring.test.constructor.autowire.mode de la JVM en all. Además, el modo predeterminado se puede configurar a través de SpringProperties mecanismo.

A partir de Spring Framework 5.3, el modo predeterminado también se puede configurar como Parámetro de configuración de la plataforma JUnit.

Si la propiedad spring.test.constructor.autowire.mode es no se establece, las clases de prueba de los constructores no se descubrirán ni asociarán automáticamente.

A partir de Spring Framework 5.2, el @TestConstructor la anotación solo se admite en combinación con SpringExtension para usar con JUnit Jupiter. Tenga en cuenta que SpringExtension a menudo se registra automáticamente, por ejemplo, cuando se utilizan las anotaciones @SpringJUnitConfig y @SpringJUnitWebConfig o varias anotaciones relacionadas con pruebas de Spring Boot Prueba.

@NestedTestConfiguration

@NestedTestConfiguration es una anotación de nivel de tipo que se utiliza para configurar si cómo se manejan las anotaciones de configuración de prueba en Spring dentro de la jerarquía de clases para las clases de prueba internas.

Si la anotación @NestedTestConfiguration no está presente o está presente a través de una metaanotación en una prueba class, en sus supertipos de jerarquía o en la jerarquía de sus clases envolventes, se utilizará el modo de herencia predeterminado de la configuración envolvente. Para obtener detalles sobre cómo cambiar el modo predeterminado, consulte el consejo a continuación.

Cambiar el modo de herencia de configuración envolvente predeterminado

El modo de herencia de configuración envolvente predeterminado es INHERIT, pero se puede cambiar estableciendo la propiedad del sistema spring.test.enclosing.configuration de JVM a OVERRIDE. Alternativamente, el modo predeterminado se puede configurar a través de SpringProperties mecanismo.

Spring TestContext Framework admite la semántica de la anotación @NestedTestConfiguration para las siguientes anotaciones.

Usando @NestedTestConfiguration la anotación normalmente sólo tiene sentido en combinación con clases de prueba de JUnit Jupiter marcadas con la anotación @Nested; sin embargo, puede haber otros marcos de prueba que admitan Spring y clases de prueba anidadas que utilicen esta anotación.

Consulte: sección "Configuración de una clase de prueba con la anotación @Nested" para ver el ejemplo y obtener información más detallada.

@EnabledIf

Anotación @EnabledIf se utiliza para señalar que una clase de prueba o método de prueba JUnit Jupiter anotado está habilitado y debe ejecutarse si la expression especificada es true. Específicamente, si la expresión es Boolean.TRUE o String es true (caso ignorado), se activa la prueba. Cuando se aplica a nivel de clase, todos los métodos de prueba dentro de esa clase también se habilitan automáticamente de forma predeterminada.

Las expresiones pueden tomar cualquiera de las siguientes formas:

  • Idioma expresión Lenguaje de expresión Spring (SpEL). Ejemplo: @EnabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")

  • Marcador de posición para una propiedad disponible en Environment de la primavera estructura. Ejemplo: @EnabledIf("${smoke.tests.enabled}")

  • Texto literal. Ejemplo: @EnabledIf("true")

Tenga en cuenta, sin embargo, que un literal de texto que no sea el resultado de un marcador de posición de propiedad que se establezca dinámicamente resuelto tiene valor práctico cero, ya que la anotación @EnabledIf("false") es equivalente a la anotación @Disabled, y la @EnabledIf("true") la anotación no tiene sentido lógico.

Puede utilizar la anotación @EnabledIf como una metaanotación para crear anotaciones compuestas especiales. Por ejemplo, puede crear una anotación personalizada @EnabledOnMac de la siguiente manera:

Java

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@EnabledIf(
    expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
    reason = "Enabled on Mac OS"
)
public @interface EnabledOnMac {}
Kotlin

@Target(AnnotationTarget.TYPE, AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
@EnabledIf(
        expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
        reason = "Enabled on Mac OS"
)
annotation class EnabledOnMac {}

La anotación @EnabledOnMac sirve únicamente como ejemplo de que Esto es posible. Si este es su caso, aproveche el soporte integrado para la anotación @EnabledOnOs(MAC) en JUnit Jupiter.

A partir de JUnit 5.7, JUnit Jupiter también tiene una anotación condicional llamada @EnabledIf. Por lo tanto, si necesita utilizar el soporte de anotación @EnabledIf en Spring, asegúrese de importar el tipo de anotación del paquete correcto.

@DisabledIf

La anotación @DisabledIf se utiliza para indicar que una clase de prueba anotada de JUnit Jupiter o un método de prueba está deshabilitado y no debe ejecutarse a menos que la expresión expression resulta ser true. En particular, si la expresión es Boolean.TRUE o String es true (caso ignorado), la prueba está deshabilitada. Cuando se aplica a nivel de clase, todos los métodos de prueba en esa clase también se desactivan automáticamente.

Las expresiones pueden tomar cualquiera de las siguientes formas:

  • Expresión de lenguaje Lenguaje de expresión Spring (SpEL). Ejemplo: @DisabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")

  • Marcador de posición para una propiedad disponible en el marco de Spring Environment . Ejemplo: @DisabledIf("${smoke.tests.disabled}")

  • Texto literal. Ejemplo: @DisabledIf("true")

Tenga en cuenta, sin embargo, que un literal de texto que no sea el resultado de un marcador de posición de propiedad que se establezca dinámicamente resuelto tiene valor práctico cero, ya que la anotación @DisabledIf("true") es equivalente a la anotación @Disabled, y la @DisabledIf("false") la anotación no tiene sentido lógico.

Puede utilizar la anotación @DisabledIf como una metaanotación para crear anotaciones compuestas especiales. Por ejemplo, puede crear una anotación personalizada @DisabledOnMac de la siguiente manera:

Java

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@DisabledIf(
    expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
    reason = "Disabled on Mac OS"
)
public @interface DisabledOnMac {}
Kotlin

@Target(AnnotationTarget.TYPE, AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
@DisabledIf(
        expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
        reason = "Disabled on Mac OS"
)
annotation class DisabledOnMac {}

La anotación @DisabledOnMac sirve únicamente como ejemplo de que Esto es posible. Si este es su caso, aproveche el soporte integrado para la anotación @DisabledOnOs(MAC) en JUnit Jupiter.

A partir de JUnit 5.7, JUnit Jupiter también tiene una anotación condicional llamada @DisabledIf. Por lo tanto, si necesita utilizar el soporte de anotación @DisabledIf en Spring, asegúrese importa el tipo de anotación del paquete correcto.