### 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.