Swift Testing #3: Organizar, Clasificar y Filtrar pruebas con @Tag

Published: (December 4, 2025 at 05:03 PM EST)
3 min read
Source: Dev.to

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 let en lugar de var en la declaración del Tag, 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

Reporte con etiquetas

Filtrado por etiquetas

Filtrado por etiquetas

Bibliografía

  • Video “Mastering Swift Testing: Organize and Filter Tests with @Tag” (Swift and Tips), aquí.
  • Lista de reproducción “Swift Testing” (Swift and Tips), aquí.
  • Documentación sobre Swift Testing, aquí.
  • Documentación: Adding tags to tests, aquí.
Back to Blog

Related posts

Read more »