Home » Noticias » Xcode 8.3 incorpora test asíncronos en XCTest
XCTest Asíncronos

Xcode 8.3 incorpora test asíncronos en XCTest

Seguimos revisando novedades de lo lanzado en las nuevas betas que vieron la luz el pasado día 24. Tras el repaso que ya hicimos hace un par de días con las novedades, seguimos descubriendo cosas mientras miramos la documentación. Una de ellas nos ha llamado poderosamente la atención porque es una de las peticiones históricas que ha tenido Cocoa, en referencia al TDD (o desarrollo enfocado a pruebas).

El desarrollo TDD (Test Driven-Development) es un paradigma de desarrollo donde a la hora de crear una app o desarrollo, se diseñan igualmente pruebas de integridad para detectar que en el transcurso del desarrollo no se crean efecto colaterales que hagan que la app deje de funcionar como debería.

Podemos imaginar una prueba muy simple, como que comprobemos que el número de celdas de una tabla (de filas) siempre tenga que ser igual al total de elementos de una tabla en una base de datos y, además, nos asegure que dicho número siempre será superior a 0. Puede ser una prueba simple, pero si hay cualquier problema con los datos como un borrado accidental o una entrada de datos incorrecta no sincronizada, el test nos puede permitir detectar estos problemas. Cosas que de otra forma no hubiéramos sido capaces de detectar.

Pero hasta ahora, todos los XCTest (los casos de uso) que podíamos programar eran casos síncronos: operaciones que se realizan y verifican en tiempo real sobre un mismo hilo. No existía la posibilidad de verificar si una operación asíncrona (como una llamada de red) funcionaba correctamente. Si nosotros esperamos que una llamada funcione o sepamos a grandes rasgos qué datos tiene que devolver sobre una base, no podíamos verificarlo porque una operación de red no responde en tiempo real y su respuesta se realiza en otro hilo tras un tiempo de espera.

Pero Apple ha incorporado a la librería XCTest una nueva API llamada XCTWaiter, que podemos definir como una prueba que ha de esperar un tiempo que definamos para obtener una respuesta, y en caso que esta suceda correctamente, una delegación se encargará de saltar para poder comprobar los resultados. Un test en dos pasos creado específicamente para estos casos asíncronos.

El nuevo XCTWaiter se inicializa con un delegate a la clase que queramos y a partir de ahí se invocan unos métodos wait(for:timeout) (que tienen tantos métodos de tipo como de instancia). En estos se envían un array de expectaciones de pruebas, un objeto XCTestExpectation que creamos a partir de una descripción, un objeto que sirva para la evaluación, una notificación o un diccionario donde especificamos clave y valor deseado de respuesta para la petición.

A grandes rasgos, configuramos las expectativas de qué ha de devolver nuestra llamada, establecemos un tiempo de timeout que será el máximo que se esperará a una respuesta positiva a la petición, y luego se evalúa la respuesta del texto a partir de sus funciones delegadas. Tenemos varias delegaciones, como cuando se han cumplido todas las expectativas en la respuesta, otra cuando ha saltado el timeout y otra cuando la respuesta ha sido positiva, pero el array de expectativas no coincide con las esperadas.

Sin duda es una grandísima e importante incorporación, que aunque Apple aun no ha documentado convenientemente (solo tiene la especificación de los procesos) estamos seguros que ayudará a que los test sean mucho más eficientes cubriendo un espectro de operaciones muy importantes para cualquier desarrollador.

En cuanto sepamos mejor cómo funciona y trabajemos con ejemplos, os los haremos llegar. Un saludo y Good Apple Coding.

XCTest, referencia de documentación | Enlace

Acerca de Julio César Fernández

Analista, consultor y periodista tecnológico, desarrollador, empresario, productor audiovisual, actor de doblaje e ingeniero de vídeo y audio.

Otras recomendaciones

Files Banner

¡BOOM! Se filtra el gestor oficial de archivos de Apple: Files

A solo una horas de comenzar la WWDC, se filtra en el App Store durante unos minutos la app Files, gestor oficial de archivos para iOS 11. Analizamos cómo podría iOS 11 incorporar la gestión de archivos, que el hecho de cómo y dónde está publicada nos da mucha información de lo que Apple piensa hacer con este demandado servicio para sus dispositivos iOS.