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

4.1 KiB

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.