Organiza Pruebas con Swift Testing usando Suites y Tags
Libranner Santos
31 julio, 20243min de lectura
Es necesario utilizar Xcode 16 Beta o superior para trabajar con Swift Testing.
Gracias a Swift Testing y Xcode 16, podemos organizar las pruebas de diferentes maneras para facilitar su ejecución e identificación. Para esto, usamos Suites y Tags.
Suites
Usamos las Suites para agrupar tests relacionados. Esto lo logramos anotando nuestros tests con @Suite
. Si un tipo contiene funciones anotadas con @Test
, es reconocido implícitamente como una Suite de tests.
@Suite("Tests for Main Model")struct ModelTests {@Test func checkProcess() {}@Suite struct ModelWithMultipleItems {@Test func makeNewItem() {}}}
Creamos una Suite llamada “Tests for Main Model”, que a su vez contiene otra Suite. Como no indicamos un nombre personalizado, se llama “ModelWithMultipleItems”.
Así se visualiza esto en Xcode en el nuevo Test Navigator:
Características de una Suite
- Puedes usar variables de instancia.
- Podemos utilizar
init
ydeinit
para realizar tareas que cuando usamosXCTest
colocaríamos, por ejemplo, entearDown()
ysetUp()
. - Se inicializa una vez por cada
@Test
que contiene para evitar fallos relacionados a estado compartido.
Ejecutando pruebas unitarias de manera serial
Swift Testing ejecuta las pruebas en paralelo y de manera aleatoria. Si deseamos cambiar este comportamiento, debemos definir la Suite de la siguiente forma:
@Suite("Tests for Main Model", .serialized)
Aquí agregamos un trait
llamado serialized
, el cual garantiza que las pruebas se ejecuten una detrás de otra. Las Suites anidadas heredarán este comportamiento.
Organizando los tests usando tags
Una de las novedades que aporta Swift Testing es la capacidad de organizar las pruebas usando Tags.
// 1extension Tag {@Tag static var special: Self}// 2@Test("Verify model contains multiple items".tags(.special))func hasMultipleItems() async throws {...}
Qué pasa en este código:
- Swift Testing viene con una lista de tags predefinidos, pero podemos crear nuestros propios tags extendiendo
Tag
. Para esto, debemos usar el macroTag
y declarar nuestro nuevo tag de manera estática. - Pasamos nuestro nuevo
Tag
al macro@Test
utilizandotags(_:)
. Nótese que este espera una lista de tags, por lo que podríamos pasar más de uno si es necesario.
También podemos asignar un Tag
a una Suite de tests, y todos los tests contenidos lo heredarán.
@Suite(.tags(.special))struct MyTests {@Test...}
Test Navigator ❤️ Tags
Test Navigator ofrece nuevas formas de visualizar los resultados y los casos de prueba. Podemos ver el listado de Tags y, haciendo clic en el icono de la derecha, ejecutar las pruebas que tengan el tag seleccionado.
Además podemos filtrar usando los Tags para encontrar las pruebas de manera más rápida.
¿Por qué usar tags?
- Proveen una forma fácil de agrupar tests relacionados.
- Xcode nos permite ejecutar todos los tests con un tag específico.
- Podemos filtrar los reportes de tests usando tags.
- Pueden ser compartidos en múltiples proyectos.
- Podemos excluir (o incluir) un grupo de tests que compartan un tag en los Test Plans.
Conclusión
Gracias a Swift Testing no solo podemos crear pruebas unitarias de forma más sencilla, sino que podemos trabajar de forma más organizada gracias a Suites y Tag.
Seguiremos publicando más contenido sobre Swift Testing en las próximas semanas y compartiéndolo en nuestro blog y redes. ¡Hasta la próxima!