Herramientas de desarrollo
**************************

Los módulos descritos en este capítulo le ayudan a escribir software.
Por ejemplo, el módulo "pydoc" toma un módulo y genera documentación
basada en el contenido del módulo.  Los módulos "doctest" y "unittest"
contienen frameworks para escribir pruebas unitarias que ejecutan y
validan automáticamente el código, verificando que se produce la
salida esperada.  **2to3** puede traducir el código fuente de Python
2.x en código válido de Python 3.x.

La lista de módulos descritos en este capítulo es:

* "typing" --- Soporte para *type hints*

  * Relevant PEPs

  * Alias de tipo

  * NewType

  * Callable

  * Genéricos

  * Tipos genéricos definidos por el usuario

  * El tipo "Any"

  * Subtipado nominal vs estructural

  * Contenido del módulo

    * Primitivos especiales de tipado

      * Tipos especiales

      * Formas especiales

      * Tipos de construcción de genéricos

      * Otras directivas especiales

    * Colecciones genéricas concretas

      * Correspondientes a tipos integrados

      * Correspondiente a tipos en "collections"

      * Otros tipos concretos

    * Clase base abstracta para tipos genéricos

      * Correspondientes a las colecciones en "collections.abc"

      * Correspondiente a otros tipos en "collections.abc"

      * Programación asíncrona

      * Tipos del administrador de contextos

    * Protocolos

    * Funciones y decoradores

    * Ayudas de introspección

    * Constantes

* "pydoc" --- Generador de documentación y Sistema de ayuda en línea

* Modo de desarrollo de Python

* Efectos del modo de desarrollo de Python

* Ejemplo de ResourceWarning

* Ejemplo de error de descriptor de archivo incorrecto

* "doctest" -- Prueba ejemplos interactivos de Python

  * Uso simple: verificar ejemplos en docstrings

  * Uso Simple: Verificar ejemplos en un Archivo de Texto

  * Cómo funciona

    * ¿Qué docstrings son examinados?

    * ¿Cómo se reconocen los ejemplos de docstring?

    * ¿Cuál es el contexto de ejecución?

    * ¿Y las excepciones?

    * Banderas de Opción

    * Directivas

    * Advertencias

  * API básica

  * API de unittest

  * API avanzada

    * Objetos DocTest

    * Objetos *Example*

    * Objetos *DocTestFinder*

    * Objetos *DocTestParser*

    * Objetos *DocTestRunner*

    * Objetos *OutputChecker*

  * Depuración

  * Plataforma improvisada

* "unittest" --- Infraestructura de tests unitarios

  * Ejemplo sencillo

  * Interfaz de línea de comandos

    * Opciones de la línea de órdenes

  * Descubrimiento de pruebas

  * Organización del código de pruebas

  * Reutilización de código de prueba anterior

  * Omitir tests y fallos esperados

  * Distinguiendo iteraciones de tests empleando subtests

  * Clases y funciones

    * Casos de test

      * Alias obsoletos

    * Agrupando tests

    * Cargando y ejecutando tests

      * load_tests protocolo

  * Instalaciones para clases y módulos

    * setUpClass y tearDownClass

    * setUpModule y tearDownModule

  * Manejo de señales

* "unittest.mock" --- Biblioteca de objetos simulados

  * Guía rápida

  * La clase Mock

    * Llamar a los objetos simulados

    * Eliminar atributos

    * Los nombres de los objetos simulados y el atributo *name*

    * Adjuntar objetos simulados como atributos

  * Parcheadores

    * patch

    * patch.object

    * patch.dict

    * patch.multiple

    * Métodos start y stop de patch

    * Parchear objetos incorporados (builtins)

    * TEST_PREFIX

    * Anidando decoradores patch

    * Dónde parchear

    * Parcheando descriptores y objetos proxy

  * MagicMock y el soporte de métodos mágicos

    * Simular métodos mágicos

    * Magic Mock

  * Ayudantes

    * sentinel

    * DEFAULT

    * call

    * create_autospec

    * ANY

    * FILTER_DIR

    * mock_open

    * Autoespecificación

    * Sellar objetos simulados

* "unittest.mock" --- primeros pasos

  * Usando Mock

    * Métodos de parcheo Mock

    * Mock de llamadas a métodos sobre un objeto

    * Clases Mocking

    * Nombrando tus mocks

    * Siguiendo todas las llamadas

    * Establecer valores de retorno y atributos

    * Generar excepciones con mocks

    * Funciones de efectos secundarios e iterables

    * Iteradores asincrónicos de Mocking

    * El gestor de contexto asincrónico de Mocking

    * Creando un mock desde un objeto existente

  * Decoradores de Parches

  * Otros Ejemplos

    * Mocking de llamadas encadenadas

    * Mocking parcial

    * Mocking de un Método Generador

    * Aplicar el mismo parche a cada método de prueba

    * Mocking de métodos sin enlazar

    * Comprobación de varias llamadas con mock

    * Copiando con argumentos mutables

    * Anidando Parches

    * Mocking a un diccionario usando MagickMock

    * Mock de subclases y sus atributos

    * Importaciones de Mocking con patch.dict

    * Seguimiento del orden de las llamadas y de las aserciones de
      llamadas menos detalladas

    * Coincidencia de argumentos más compleja

* 2to3 - Traducción de código Python 2 a 3

  * Usando 2to3

  * Fixers

  * "lib2to3" - librería 2to3

* "test" --- Paquete de pruebas de regresión para Python

  * Escritura de pruebas unitarias para el paquete "test"

  * Ejecución de pruebas utilizando la interfaz de línea de comandos

* "test.support" --- Utilidades para el conjunto de pruebas de Python

* "test.support.socket_helper" --- Utilidades para pruebas de socket

* "test.support.script_helper" ---Utilidades para las pruebas de
  ejecución de Python

* "test.support.bytecode_helper" --- Herramientas de apoyo para
  comprobar la correcta generación de bytecode
