Swift Testing (Parte 5 de 6)
1Introducción a Swift Testing
2Organiza Pruebas con Swift Testing usando Suites y Tags
3Evaluando pruebas con Swift Testing
4Pruebas unitarias asíncronas con Swift Testing
5Deshabilitando y Habilitando pruebas con Swift Testing
6Cómo escribir pruebas parametrizadas con Swift Testing
Deshabilitando y Habilitando pruebas con Swift Testing

Libranner Santos
02 octubre, 20243min de lectura
Es necesario utilizar Xcode 16 Beta o superior para trabajar con Swift Testing.
Cuando creamos una suite de pruebas, es inevitable que necesitemos deshabilitar algunas pruebas por múltiples razones. Ya sea por cambios en el SDK, dependencias de terceros que provocan fallos en la prueba, o por alguna razón relacionada con nuestro flujo de trabajo. Para esos casos, Swift Testing nos provee herramientas para desactivar, activar o “ignorar” los resultados de una prueba según corresponda.
Deshabilitar o habilitar pruebas unitarias
Para deshabilitar una prueba, podemos usar disabled(_:fileID:filePath:line:column:)
. En la macro @Test
, pasamos un argumento donde podemos indicar la razón por la que fue deshabilitada. Veamos un ejemplo:
@Test("Verify model contains multiple items", .disabled("Disabled until bug is fixed"))func checkItems() {...}
En este código, indicamos que la prueba unitaria checkItems
está deshabilitada y agregamos un comentario explicando el porqué. Xcode nos mostrará este mensaje:

También podemos deshabilitar o habilitar pruebas en tiempo de ejecución usando enabled(if:_:sourceLocation:)
. Veamos un ejemplo:
@Test("Verify model contains multiple items", .enabled(if: MyService().enabled))func checkItems() {...}
En este caso, MyService
contiene una propiedad enabled
. Cuando esta sea false
, la prueba será omitida. Xcode nos mostrará el siguiente mensaje:

Estas dos formas de indicar el estado de una prueba también pueden combinarse, por ejemplo:
@Test("Verify model contains multiple items",.enabled(if: Service().enabled),.disabled("Disabled until bug is fixed"),.bug("https://jira.com", id: "123"))
En este caso, también pasamos .bug("https://jira.com", id: "123", "Nice comment")
. Esto nos permite indicar una URL
y un id
. Estos datos idealmente deberían estar relacionados con nuestra herramienta para reporte de errores.
Si seleccionamos la prueba en cuestión haciendo doble clic sobre la descripción en el reporte de resultados, en la parte superior derecha podremos ver un botón que nos llevará a la dirección web indicada.

With know issues
En ocasiones, tenemos pruebas unitarias que fallan por razones que no podemos resolver en el momento. Sin embargo, no podemos borrarlas porque constituyen una parte que queremos validar de nuestro código. Para lidiar con esto, tenemos varias opciones. Usar @Test(.disabled)
para deshabilitarla por completo es una, como vimos anteriormente. Sin embargo, Swift Testing nos provee una mejor opción usando withKnownIssue
. Veamos un ejemplo:
@Test func removeItemError() throws {let model = Model()withKnownIssue {try model.removeAll()}}
Colocar el código try model.removeAll()
dentro de withKnownIssue(_:isIntermittent:fileID:filePath:line:column:_:)
nos permite ejecutar la prueba sabiendo que puede fallar y ver los errores de compilación generados en los resultados sin “fallar” la prueba unitaria.
Xcode nos mostrará este mensaje si el error ocurre y omitirá el resultado de la prueba:

Sin embargo, si el error no ocurre indicará que la prueba ha fallado:

Esto puede ser una forma de lidiar con los denominados “flaky tests”, pruebas que por razones no identificadas en el momento fallan de manera intermitente. Debemos tomar en cuenta que esto debe verse como una solución temporal.
Conclusión
Este es el quinto artículo de la serie sobre Swift Testing. Ahora ya sabemos cómo desactivar/activar pruebas de manera eficiente.
Swift Testing (Parte 5 de 6)
1Introducción a Swift Testing
2Organiza Pruebas con Swift Testing usando Suites y Tags
3Evaluando pruebas con Swift Testing
4Pruebas unitarias asíncronas con Swift Testing
5Deshabilitando y Habilitando pruebas con Swift Testing
6Cómo escribir pruebas parametrizadas con Swift Testing