Apuntes_Python/01_curso/Modulo_3/3-4c_testing.md
2022-12-24 22:41:20 -03:00

115 lines
4.1 KiB
Markdown

### Testing
***Solo se detalla:***
Test Unitario Automático
Los test poseen una estructura interna común:
- **Anatomía de los Tests**
- ***Setup***:
Es donde se crean los objetos necesarios (el contexto) para el test.
- ***Act***:
Acción a realizar o probar.
- ***Assertions***:
Verificaciones sobre resultados obetnidos.
```
Los assertions son afirmaciones que gerealmente
chequean el estado del sistema, comparando los resultados
obtenidos con los esperados.
Algunos métodos de la clase TestCase:
- assertEqual - assertNotEqual - assertTrue - assertFalse - assertRises
```
- **Caracteristicas deseables de los test**
- Ser de rápida ejecución.
- Ser reducidos en tamaño.
- Ser entendibles.
- Debe tener 1 test por caso.
- Debe tener control de todo.
- "misma cantidad de lineas de código q las del sistema".
- Nombres declarativos y resumir el:
***GIVEN*** / ***WHEN*** / ***THEN***
- **Buenas practicas**
```
- Testear un caso por test (no implica tener solo un assert)
- Empezar siempre por el test mas sencillo.
- Comenzar por la aserción, ayuda a entender qué se quiere hacer.
- Siempre debe haber un assert en el test (o fail, etc).
- Recordar testear casos "negativos" (posibles fallas), no solo "positivos".
- Recordar que el test debe estar en cotrol de todo:
*En el caso de testeo sobre secuencias:
Verificar la longitud que debe tener y que estén unicamente los objs. que
deben estar.
```
- **Clasificación de Test según funcionamiento**
- Test Insoportables: Tardan mucho, posible uso de algún recurso lento (bd, conex, etc).
- Test Fragiles: Se "rompen" cuando se modifica la implementación interna de un objeto. Son test de "caja blanca".
- Test Erraticos: Aveces funcionan, otras no. Hay dependencias de "pictures" entre test o usan recursos externos.
#### Framework Xunit
Frameworks de desarrollo guiado por por pruebas
conocidos colectivamente como xUnit.
Disponibles para otros lenguajes y plataformas.
#### Librería Unittest
Framework de test unitarios **unittest** de la libreria estándar.
Inspirado en *JUnit*.
Similar a la mayoria de los frameworks de otros lengajes.
Soporta automatización de test, código compartido para setup y shutdown de test,
agregar test en colecciones e independencia de tests respecto del framework de reporte.
##### Componentes Xunit
* **Test Fixture :** Representa la preparación necesaria para correr uno o más test,
y cualquier acción de limpieza asociada.
* **Test Case :** Unidad de prueba individial.
Ademas de definir los metodos de Assertions, define también:
- setUp:
Llamado antes de ejecutar cada test del TestCase.
Aqui va el código para preparar el contexto del test
- tearDown:
LLamado al finalizar cada ejecución de test del TestCase.
Aquí va el código para limpiar el contexto que pudo haber modificado el test.
- setUpClass:
Ejecutado cuando se crea una instancia del TestCase.
Utilizado para hacer un setup del contexto común entre todos los test del TestCase.
- tearDownClass:
Ejecutado cuando se destruye una instancia del TestCase.
Utilizado para hacer limpieza del contexto. Evitando que afecte otros TestCase.
- addCleanup:
Agrega una función de limpieza que se ejecutará en el teardown del test.
Al agregar "muchas" opciones, estas se ejecutarán en orden LIFO.
* **Test Suite :** Colección de test cases, test suites o ambos.
* **Test Runner:** Coordina la ejecución de test y provee el Output al usuario.