Ir al contenido principal
Versión: 6.0

Pruebas condicionales con anotaciones

[Traducción Beta No Oficial]

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

Si deseamos deshabilitar completamente un Spec y todas sus pruebas incluidas, podemos hacerlo mediante anotaciones.

Una ventaja de este enfoque, en lugar de deshabilitar cada prueba individualmente, es que el Spec no se instanciará. Si un Spec tiene operaciones costosas de configuración/desmontaje de recursos, este método permite evitar ese tiempo.

[Solo JVM]

Estas anotaciones solo están disponibles para Specs que se ejecutan en la JVM.

@Ignored

Si simplemente queremos deshabilitar un Spec completamente, podemos usar la anotación @Ignored.

@Ignored
class IgnoredSpec : FunSpec() {
init {
error("boom") // spec will not be created, so this error will not happen
}
}

@EnabledIf

Si queremos habilitar un Spec dependiendo de la ejecución de una función, podemos usar @EnabledIf.

Esta anotación acepta una clase que implemente Condition, la cual se instancia y se invoca para determinar si un Spec está habilitado. Ten en cuenta que las implementaciones deben tener un constructor sin argumentos.

Por ejemplo, podemos querer ejecutar un Spec solo cuando se esté ejecutando en una máquina Linux. Usaremos la propiedad del sistema os.name para determinar si estamos en Linux.

class LinuxOnlyCondition : Condition {
override fun evaluate(kclass: KClass<out Spec>): Boolean {
val os = System.getProperty("os.name") ?: return false
return os.lowercase().contains("linux")
}
}

Entonces podemos aplicar esta condición a uno o más Specs:

@EnabledIf(LinuxOnlyCondition::class)
class MyLinuxTests : FunSpec() {
// tests here
}

@EnabledIf(LinuxOnlyCondition::class)
class MyWindowsTests : DescribeSpec() {
// tests here
}

@DisabledIf

Lo opuesto a @EnabledIf. Cualquier Spec anotado con @DisabledIf se deshabilitará si la condición aplicada a esa anotación se evalúa como true.

Por ejemplo, podemos querer deshabilitar un Spec en particular cuando se ejecute en un servidor de CI. Usaremos la presencia de la variable de entorno CI para determinar si estamos en un servidor de CI.

class CIServerCondition : Condition {
override fun evaluate(kclass: KClass<out Spec>): Boolean = System.getenv("CI") != null
}

Entonces podemos aplicar esta condición a uno o más Specs:

@DisabledIf(CIServerCondition::class)
class SkipOnCiSpec : FunSpec() {
// tests here
}