Ferramentas de Desenvolvimento
******************************

Os módulos descritos neste capítulo ajudam você a escrever softwares.
Por exemplo, o módulo "pydoc" recebe um módulo e gera documentação com
base no conteúdo do módulo. Os módulos "doctest" e "unittest" contêm
frameworks para escrever testes unitários que automaticamente
exercitam código e verificam se a saída esperada é produzida. **2to3**
pode traduzir o código-fonte do Python 2.x para um código válido do
Python 3.x.

A lista de módulos descritos neste capítulo é:

* "typing" --- Suporte para dicas de tipo

  * Apelidos de tipo

  * NewType

  * Callable

  * Generics

  * User-defined generic types

  * The "Any" type

  * Nominal vs structural subtyping

  * Classes, functions, and decorators

* "pydoc" --- Gerador de documentação e sistema de ajuda online

* "doctest" --- Teste exemplos interativos de Python

  * Uso simples: verificando exemplos em Docstrings

  * Utilização comum: Verificando exemplos em um arquivo de texto

  * Como funciona

    * Which Docstrings Are Examined?

    * How are Docstring Examples Recognized?

    * What's the Execution Context?

    * What About Exceptions?

    * Flags opcionais

    * Directives

    * Avisos

  * Basic API

  * API do Unittest

  * Advanced API

    * DocTest Objects

    * Example Objects

    * DocTestFinder objects

    * DocTestParser objects

    * DocTestRunner objects

    * OutputChecker objects

  * Depuração

  * Soapbox

* "unittest" --- Framework de Testes Unitários

  * Exemplo Básico

  * Interface de Linha de Comando

    * Opções de linha de comando

  * Test Discovery

  * Organizando código teste

  * Reutilizando códigos de teste antigos

  * Ignorando testes e falhas esperadas

  * Distinguindo iterações de teste utilizando subtestes

  * Classes e funções

    * Casos de teste

      * Deprecated aliases

    * Grouping tests

    * Carregando e executando testes

      * load_tests Protocol

  * Classes e Módulos de Definição de Contexto

    * setUpClass and tearDownClass

    * setUpModule and tearDownModule

  * Tratamento de sinal

* "unittest.mock" --- biblioteca de objeto mock

  * Guia Rápido

  * A classe Mock

    * Calling

    * Deleting Attributes

    * Mock names and the name attribute

    * Attaching Mocks as Attributes

  * The patchers

    * patch

    * patch.object

    * patch.dict

    * patch.multiple

    * patch methods: start and stop

    * patch builtins

    * TEST_PREFIX

    * Nesting Patch Decorators

    * Where to patch

    * Patching Descriptors and Proxy Objects

  * MagicMock and magic method support

    * Mocking Magic Methods

    * Magic Mock

  * Helpers

    * sentinel

    * DEFAULT

    * call

    * create_autospec

    * ANY

    * FILTER_DIR

    * mock_open

    * Autospeccing

    * Sealing mocks

* "unittest.mock" --- primeiros passos

  * Usando Mock

    * Métodos de aplicação de patches em Mock

    * Mock for Method Calls on an Object

    * Mocking Classes

    * Nomeando os mocks

    * Tracking all Calls

    * Setting Return Values and Attributes

    * Raising exceptions with mocks

    * Side effect functions and iterables

    * Mocking asynchronous iterators

    * Mocking asynchronous context manager

    * Creating a Mock from an Existing Object

  * Patch Decorators

  * Further Examples

    * Mocking chained calls

    * Partial mocking

    * Mocking a Generator Method

    * Applying the same patch to every test method

    * Mocking Unbound Methods

    * Checking multiple calls with mock

    * Coping with mutable arguments

    * Nesting Patches

    * Mocking a dictionary with MagicMock

    * Mock subclasses and their attributes

    * Mocking imports with patch.dict

    * Tracking order of calls and less verbose call assertions

    * More complex argument matching

* 2to3 - Tradução Automatizada de Código Python 2 para 3

  * Usando o 2to3

  * Fixadores

  * "lib2to3" - biblioteca 2to3's

* "test" --- Pacote de Testes de Regressão do Python

  * Escrever testes unitários para o pacote "test"

  * Executando testes usando a interface de linha de comando

* "test.support" --- Utilitários para o conjunto de teste do Python

* "test.support.script_helper" --- Utilities for the Python execution
  tests

Veja também o modo de desenvolvimento do Python: a opção "-X" "dev" e
a variável de ambiente "PYTHONDEVMODE".
