Swift Testing #3: Organizar, Clasificar y Filtrar pruebas con @Tag
Source: Dev.to
Introducción
Un proyecto puede tener cientos o miles de pruebas y suites. Un subconjunto de estas pruebas puede compartir alguna característica común, como ser crítico o inestable. La biblioteca de pruebas de Swift incluye un trait llamado tags para agrupar y categorizar pruebas.
Las etiquetas (Tags) son distintas de las suites de pruebas: mientras que las suites organizan las pruebas a nivel de código, los tags añaden información semántica que puede compartirse entre distintas suites, archivos o incluso targets de prueba.
Una etiqueta es una instancia de Tag declarada como variable estática dentro de una extensión de Tag mediante el macro @Tag. Esta declaración debe estar dentro de una extensión de Tag para que pueda ser usada en las pruebas.
extension Tag {
@Tag static var legallyRequired: Self
}
Nota: Si se usa
leten lugar devaren la declaración delTag, Swift 6 muestra la advertencia
Cannot expand accessor macro on variable declared with 'let'; this is an error in the Swift 6 language mode.
Uso de tags en pruebas
Se pueden aplicar una o varias etiquetas a una prueba pasando los tags como argumentos variádicos al trait .tags() después de la descripción de la prueba.
extension Tag {
@Tag static var tag1: Self
@Tag static var tag2: Self
}
@Test("Descripción de la prueba", .tags(.tag1, .tag2))
func prueba() { /* ... */ }
Si se usan varias etiquetas, la prueba pertenece a todos los grupos etiquetados simultáneamente, pero solo se ejecuta una vez; el resultado aparecerá en cada grupo correspondiente.
Etiquetar una suite completa
Un Tag también puede aplicarse a una Suite entera, lo que implica que todas las pruebas de esa suite comparten la misma etiqueta.
extension Tag {
@Tag static var tag1: Self
@Tag static var tag2: Self
}
@Suite("FEATURE: Alguna funcionalidad", .tags(.tag1, .tag2))
struct FeatureX {
@Test("Descripción de la prueba 1")
func prueba1() { /* ... */ }
@Test("Descripción de la prueba 2")
func prueba2() { /* ... */ }
}
Namespaces para tags con el mismo nombre
Si se declaran dos etiquetas con el mismo nombre en lugares diferentes, Swift las considera equivalentes. Para distinguirlas, se puede crear un namespace dentro de Tag.
extension Tag {
enum SomeNamespace {}
}
extension Tag.SomeNamespace {
@Tag static var extraSpecial: Tag
}
@Test(
"Extra Special Sauce recipe is secret",
.tags(.SomeNamespace.extraSpecial)
)
func secretSauce() { /* ... */ }
Navegador de pruebas

Reporte de pruebas

Filtrado por etiquetas
