Unit Tests
Source: https://help.sap.com/doc/saphelp_nw75/7.5.5/en-US/4e/c4d16b6e391014adc9fffe4e204223/content.htm?no_cache=true
seen from United States
seen from China
seen from United Kingdom
seen from United States
seen from France
seen from Italy
seen from United States
seen from United States
seen from Yemen

seen from United States

seen from United States

seen from United States

seen from Sweden

seen from Malaysia
seen from Türkiye
seen from Finland

seen from Türkiye
seen from United Kingdom
seen from Türkiye

seen from United States
Unit Tests
Source: https://help.sap.com/doc/saphelp_nw75/7.5.5/en-US/4e/c4d16b6e391014adc9fffe4e204223/content.htm?no_cache=true
Test Double : Stub
Test Double : Stub
In the last article, we’ve already talk about Test Double in general. In this article, we will talk about on of test double, called stub. Testing a component can be helped with another collaborator component with predefined behavior. This is called stubbing. 💡 Stubs provide canned answers to calls made during the test, usually not responding at all to anything outside what’s programmed in for…
View On WordPress
Cómo Probar Eventos en LARAVEL
Cómo Probar Eventos en LARAVEL
👉🏼 Hoy vamos a ver como podemos probar eventos en Laravel, el ejemplo es usando el registro de usuario del paquete Laravel/breeze. (more…)
View On WordPress
7 Casos donde debes de usar Dobles de Prueba
7 Casos donde debes de usar Dobles de Prueba
Generalmente los dobles de prueba se usan para situaciones donde necesitamos simular la interacción con recursos que son difíciles de usar en una prueba. Pero cuando comenzamos a usar dobles a veces se complica un poco saber en que casos me conviene usarlos. Es por eso que te dejo algunas situaciones donde puedes usar dobles de prueba y también te dejo un pequeño ejemplo de cada…
View On WordPress
Test Doubles o Dobles de prueba y como usarlos en Laravel
⚠ ¿Cómo podemos probar la lógica de forma independiente cuando nuestro código depende de otra clase? aprende como usar los Test Doubles en tu pruebas
¿Cómo podemos probar la lógica de forma independiente cuando nuestro código depende de otra clase? Cuando trabajamos usando TDD las cosas se ponen interesantes cuando comenzamos a probar clases que dependen de otras para hacer su trabajo. a veces es posible instanciar las dependencias y seguir probando, pero algunos casos son mas complicados porque son dependencias que a su vez necesitan de…
View On WordPress
A conversation with Robert Martin (Uncle Bob) about "Test Doubles"
We can say that a Mock is a kind of spy, a spy is a kind of stub, and a stub is a kind of dummy. But a fake isn't a kind of any of them. It's a completely different kind of test double.
We can say that a Mock is a kind of spy, a spy is a kind of stub, and a stub is a kind of dummy. But a fake isn't a kind of any of them. It's a completely different kind of test double.
Cómo aislarnos de las dependencias del sistema. Un caso práctico con Python, MagicMock y TDD
El problema
Tenemos un servicio (representado por una clase con un método update sin parámetros) que es llamado periódicamente. Este servicio es invocado si el día es par o el mes es mayo u octubre (mes 5 y 10 respectivamente).
Para controlar cuando llamamos al servicio vamos a crear una clase llamada DataEvaluator con un método checkUpdate este método debe decidir, según la fecha, si llama al método update del servicio o no.
Una solución no probable
Una primera implementación rápida de este problema, en Python 3.X se muestra a continuación.
Como este código no genera ningún resultado, podemos probarlo pasándole un doble de prueba que simule el servicio. Después de llamar a checkUpdate verificamos si el método update del doble de pruebas ha llamado o no. Sin embargo, a pesar del doble de prueba, este código es muy difícil de probar. ¿Por qué?
La respuesta es que el resultado de una misma prueba varia con el tiempo, o mejor dicho, con la fecha del sistema. Según la fecha del sistema, una misma prueba puede tener un resultado esperado distinto (que el método se llame o no). No controlamos los datos de prueba, esto es la fecha actual por lo que no podemos predecir el resultado.
Una solución es encapsular el acceso a la hora del sistema en una clase y, así, durante las pruebas podremos reemplazar por otro doble de pruebas que devuelva siempre la misma fecha.
Aplicando TDD
Vamos a aplicar también TDD y escribimos primero la prueba. Nuestra primera prueba será la siguiente.
En la prueba anterior creamos un espía, servicio, que nos servirá para determinar si el método update se ha llamado o hacer que la prueba falle si no se ha llamado.
Además, creamos un stub que devolverá una fecha con el día 02 del mes 02 cuando se llame a su método now(). El año no es necesario por lo que lo incluimos. Ahora, a nuestra clase DataEvaluator hemos de proporcionarle tanto el servicio a llamar como el servicio para obtener la fecha.
Vamos a escribir el mínimo código que hace que esta prueba pase.
Para hacer evolucionar este código necesitamos una nueva prueba muy similar a la primera. Esta segunda prueba se muestra a continuación.
Ahora verificamos que, si el día e simpar, no se invoque el método update del servicio. Para implementar esta prueba hemos de añadir un if al código de nuestro DateEvaluator, como se muestra a continuación.
Antes de continuar nos fijamos que las pruebas tienen mucho código repetido. Vamos a refactorizar para evitar las duplicaciones y que las pruebas sean más sencillas de entender.
Vamos a añadir a continuación una nueva prueba que incorpore la funcionalidad de actualizar el servicio cuando el mes es múltiplo de 5. Con la refactorición anterior tenemos que escribir mucho menos código.
Para que esta prueba se ejecute con éxito hay que modificar el if del método checkUdate de nuestra clase DataEvaluator.
Con esta última prueba y modificación del código ya hemos terminado la implementación.
Conclusiones
Aplicando TDD hemos obtenido el mismo código que escribimos al principio de esta entrada, pero con una diferencia importante. Ahora sí podemos probar el comportamiento de DataEvaluator. Al indicarle cuál es la clase que tiene que utilizar para obtener la fecha del sistema, podemos indicarle una fecha adecuada para el resultado que queramos verificar.
El desarrollo dirigido por pruebas, o TDD, nos hace empezar escribiendo una prueba antes de escribir el código. Así podemos identificar estas dependencias y aislarlas desde el primer momento.
Ten cuidado cuando utilices librerías de dobles de prueba que trabajen con objetos espía, como MagicMock (la utilizada en este ejemplo). Si te equivocas con el nombre de un método y, por ejemplo escribes self.mock_serv.update.assert_called () en vez de self.mock_serv.update.assert_called_with() el objeto aceptará la llamada y la prueba se dará por válida erróneamente.
Para saber más
Puedes aprender más sobre TDD, dobles de prueba e independencia del sistema, puedes seguir los siguientes enlaces:
Libro Diseño Ágil con TDD
Libro Desarrollo Dirigido por Pruebas Práctico
Mocks en Python
Kata Tenis en Python paso a paso aplicando TDD
Desarrollo dirigido por pruebas en Python (I): Una historia que pasa todos los días
Desarrollo Dirigido por Pruebas en Python (II). Un Caso Práctico (I)
.