Cómo probar el código Combine en Swift
Probar nuestro código es una parte fundamental del proceso de desarrollo.
Pero, si estamos usando el marco Combine, esto podría ser poco intuitivo a primera vista. Eso no quiere decir que no se pueda hacer. Solo necesitamos profundizar en algunos conceptos más avanzados que nos proporciona Swift.
Echemos un vistazo a cómo podemos incluir fácilmente pruebas unitarias en nuestro código Combine.
Comencemos mirando el siguiente administrador que simula el manejo de un semáforo.
De nuestro artículo inicial de Combine, sabemos que al agregar el envoltorio @Published, obtenemos un editor gratuito al que podemos acceder usando el carácter $.
Pruebas
Antes de profundizar en cómo probar realmente el código Combine, repasemos algunos conceptos básicos con respecto a las pruebas unitarias. Podemos resumirlo en tres pasos.
- Paso 1: Define lo que quieres probar.
- Paso 2: Ejecute la operación que desea probar con el valor que definió en el Paso 1.
- Paso 3: Evalúa el resultado que obtuviste en el Paso 2.
Este es un ejemplo muy simple para que puedas entender el concepto. Primero definimos nuestro valor esperado para la prueba, una luz roja. Luego, llamamos a una operación que cambia el valor actual de la luz a rojo. Y finalmente, nos aseguramos de que el valor de la luz actual sea el mismo que el esperado.
Esto está bien, pero ¿qué debemos hacer si queremos probar simulateFlow
la función? Puedes notar que dentro de esa función estamos cambiando la propiedad de la luz tres veces. Entonces, al final de la ejecución de la función, el valor de la propiedad debe cambiar de verde a amarillo, de amarillo a rojo y finalmente de rojo a verde.
Como puede imaginar, para probar la función, debemos asegurarnos de que el valor de la propiedad tenga el valor correcto al final, pero lo más importante debemos estar seguros de que todos los cambios de valor (de uno a otro) son correctos .
Expectativas
Las XCTestExpectations son un tipo de objeto que nos proporciona Apple para probar código asíncrono. Básicamente, crea una expectativa al comienzo de su prueba y cuando se cumplen ciertas condiciones, cumple esa expectativa. La ejecución de la prueba esperará hasta que se cumpla la expectativa o cuando expire un tiempo de espera.
Entonces, para probar nuestra función, tendremos que esperar hasta que recopilemos todos los valores esperados que sabemos que currentLight
la propiedad debería cambiar. Entonces, cumpliremos la expectativa si obtuvimos todos los valores. De lo contrario, la prueba fallará debido al tiempo de espera.
Con esto en mente, ahora tenemos la herramienta adecuada para crear una nueva prueba para nuestra simulateFlow
función.
Desglosemos el código:
Paso 1
- Creamos una nueva expectativa para usar en nuestra prueba.
- Definimos los valores esperados que sabemos que la propiedad debería cambiar en algún momento.
- También creamos una nueva lista vacía que usaremos para almacenar los valores que recibiremos del publicador.
- Empezamos a escuchar los valores de la editorial.
- Llamamos a la función para que comencemos a recibir los cambios de valor de la propiedad.
- Esperamos a que se cumpla la expectativa o se alcance el tiempo de espera.
- Evaluamos si los valores recibidos que obtuvimos son correctos.
Probar el código Combine es bastante fácil una vez que comprende el potencial de las expectativas. Aunque vimos un ejemplo muy corto y simple, puede usar esta misma técnica para probar soluciones más complejas.
Por ejemplo, puede aplicar estos principios para probar los estados de su ViewModel en una arquitectura MVVM o para probar algunas llamadas de red simuladas.
Es posible que desee consultar mis artículos anteriores sobre Combine.
Introducción al marco Combine en Swifthttps://blorenzop.medium.com/form-validation-with-combine-4988adcc3b0
¿Tiene alguna pregunta? Siéntete libre de dejarme un mensaje . Si te gusta mi contenido, puedes suscribirte a mi página de Medium para recibir notificaciones directamente en tu bandeja de entrada cada vez que publique un nuevo artículo.
Si quieres apoyarme, puedes seguirme en GitHub o Twitter .