Gravação de testes de unidade para o Python com o Gerenciador de Testes no Visual Studio
Testes de unidade são partes do código que testam outras unidades de código em um aplicativo, normalmente, funções isoladas, classes e assim por diante. Quando um aplicativo passa em todos os testes de unidade, você pode ter certeza de que, no mínimo, a funcionalidade do programa de baixo nível está correta.
O Python usa testes de unidade extensivamente para validar cenários durante a criação de um programa. O suporte do Python no Visual Studio inclui a descoberta, a execução e a depuração de testes de unidade no contexto do processo de desenvolvimento, sem precisar executar os testes separadamente.
Este artigo fornece uma breve descrição das funcionalidades de teste de unidade no Visual Studio com o Python. Para obter mais informações sobre testes de unidade em geral, consulte Executar um teste de unidade no código.
Pré-requisitos
Instalação do Visual Studio no Windows com suporte para cargas de trabalho em Python. Para obter mais informações, confira Instalar o suporte ao Python no Visual Studio.
Um projeto em Python com código ou uma pasta com código Python.
Não há suporte ao Visual Studio para Mac. Para obter mais informações, consulte O que está acontecendo com o Visual Studio para Mac? O Visual Studio Code no Windows, no Mac e no Linux funciona perfeitamente com o Python por meio das extensões disponíveis.
Seleção da estrutura de teste para um projeto em Python
O Visual Studio oferece suporte a duas estruturas de teste para Python: unittest e pytest (que estão disponíveis na versão 16.3 e em versões posteriores do Visual Studio 2019). Por padrão, nenhuma estrutura é selecionada quando você cria um projeto do Python.
Siga estas etapas para realizar a seleção da estrutura de teste para o projeto em Python:
No Gerenciador de Soluções, clique com o botão direito do mouse no nome do projeto e selecione Propriedades.
No painel Propriedades do projeto, selecione a guia Teste e escolha o seu tipo de Estrutura de teste:
Para a estrutura unittest, o Visual Studio atribui o Diretório raiz do projeto para a detecção de testes. O valor padrão é
.
, mas é possível especificar uma localização diferente ao definir as configurações do projeto. Além disso, é possível especificar uma ou mais sequências para o nome do arquivo de teste Padrão, comotest*.py, test_*.py
.Para a estrutura pytest, as opções de teste, como a localização de teste e os padrões do nome do arquivo, são especificadas ao usar o arquivo de configuração .ini do pytest padrão. Por padrão, a pasta de espaço de trabalho ou de projeto é usada como a localização. O padrão do nome do arquivo padrão inclui
test_*py
e*_test.py
. Para saber mais, consulte a documentação de referência pytest.
Observação
Ao definir o padrão do nome do arquivo, lembre-se de que caracteres especiais como o sublinhado (
_
) não correspondem ao caractere curinga (*
). Se desejar usar caracteres especiais no nome do arquivo, especifique esses caracteres na definição do padrão, comotest_*.py
.Para salvar a seleção e as configurações de estrutura, é possível usar o atalho de teclado Ctrl+S.
Após configurar a estrutura, o Visual Studio inicia a detecção de testes e abre o Gerenciador de Testes.
Configurar o teste para Python sem um projeto
O Visual Studio permite que você execute e teste o código Python existente sem um projeto, abrindo uma pasta com código Python. Nesse cenário, você precisa usar um arquivo PythonSettings.json para configurar os testes.
Abra o código Python existente ao usar a opção Abrir uma Pasta Local:
Ao abrir uma pasta do Python, o Visual Studio cria várias pastas ocultas para gerenciar as configurações relacionadas ao programa. Para visualizar essas pastas (e outros arquivos e pastas ocultos, como a pasta .git) no Gerenciador de Soluções, selecione a opção Mostrar Todos os Arquivos:
No Gerenciador de Soluções, expanda a pasta Configurações Locais e realize um clique duplo no arquivo PythonSettings.json para abri-lo no editor.
Observação
A maioria das configurações mostra dois arquivos de configurações: PythonSettings.json e ProjectSettings.json. Para esse exercício, você precisa modificar o arquivo PythonSettings.json.
Caso não veja o arquivo PythonSettings.json na pasta Configurações Locais, você poderá criá-lo de forma manual:
Clique com o botão direito do mouse na pasta Configurações Locais e selecione Adicionar>Novo Arquivo.
Nomeie o arquivo PythonSettings.json e selecione Enter para salvar as alterações.
O Visual Studio abre automaticamente o novo arquivo no editor.
No arquivo PythonSettings.json, adicione o código apresentado a seguir para definir
TestFramework
. Defina o valor da estrutura como pytest ou unittest com base na estrutura de teste desejada:{ "TestFramework": "unittest", "UnitTestRootDirectory": "testing", "UnitTestPattern": "test_*.py" }
Para a estrutura unittest, se você não definir valores específicos para as configurações
UnitTestRootDirectory
eUnitTestPattern
no arquivo PythonSettings.json, o Visual Studio adicionará automaticamente esses campos com os valores padrão de.
etest*.py
, respectivamente.Para a estrutura pytest, as opções de configuração são sempre especificadas no arquivo de configuração .ini do pytest, e não nas configurações do Visual Studio.
Se o programa em Python contém uma pasta src separada da pasta que contém os testes, especifique o caminho para a pasta src com a configuração
SearchPaths
no arquivo PythonSettings.json:"SearchPaths": [".\\src"]
Salve as alterações para o arquivo PythonSettings.json.
Após configurar a estrutura, o Visual Studio inicia a detecção de testes para a estrutura especificada. É possível acessar o teste no Gerenciador de Testes.
Adição e descoberta de testes
Por padrão, o Visual Studio identifica unittest e pytest como métodos cujos nomes começam com test
.
Para visualizar como o Visual Studio inicia a detecção de testes, siga estas etapas:
Abra um projeto em Python no Visual Studio.
Configure as Propriedades da estrutura de teste para o projeto, conforme descrito em Seleção da estrutura de teste para um projeto em Python.
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Adicionar>Novo Item.
Na caixa de diálogo Adicionar Novo Item, selecione o tipo de arquivo Teste de Unidade em Python.
Insira um nome do arquivo que satisfaça a definição do Padrão especificada para as Propriedades do projeto.
Selecione Adicionar.
O Visual Studio cria o arquivo de teste com o código padrão:
import unittest class Test_test1(unittest.TestCase): def test_A(self): self.fail("Not implemented") if __name__ == '__main__': unittest.main()
Esse código importa o módulo padrão
unittest
e deriva uma classe de teste do métodounittest.TestCase
. Ao executar o script diretamente, esse código também invoca a funçãounittest.main()
.
Ao adicionar novos arquivos de teste, o Visual Studio os disponibiliza no Gerenciador de Testes.
Exibição de testes com o Gerenciador de Testes
Após configurar a estrutura de teste e os arquivos de teste, o Visual Studio pesquisa os testes e os exibe no Gerenciador de Testes.
Confira abaixo algumas maneiras para se trabalhar com o Gerenciador de Testes:
Abra a janela Gerenciador de Testes ao selecionar Testes>Gerenciador de Testes.
Quando a janela Gerenciador de Testes estiver aberta, use o atalho de teclado CTRL+R, A para acionar a detecção de testes.
Realize um clique duplo em um teste no Gerenciador de Testes para abrir o arquivo de origem correspondente no editor:
Organize a exibição dos testes ao usar a opção Agrupar por na barra de ferramentas:
Filtre os testes por nome ao inserir texto no campo Pesquisar:
Execute testes e realize a exibição do status da execução de teste, conforme descrito na próxima seção.
Para obter mais informações sobre o módulo unittest
e realizar a gravação de testes, confira a documentação do Python.
Executar testes com o Gerenciador de Testes
No Gerenciador de Testes, é possível realizar a execução de testes de diversas maneiras:
- Selecione Executar Todos (os testes na exibição) para executar todos os testes mostrados na exibição atual com base nas configurações do filtro.
- Use os comandos do menu Executar para realizar a execução de testes com falha, aprovados ou para realizar uma execução sem ser em grupo.
- Selecione um ou mais testes e, em seguida, clique com o botão direito do mouse e selecione a opção Executar Testes Selecionados.
O Visual Studio executará os testes em segundo plano. O Gerenciador de Testes atualiza o status de cada teste à medida que ele é concluído:
Os testes aprovados apresentam um tique verde e o tempo para a conclusão da execução de teste:
Os testes com falha apresentam um X vermelho com um link de Saída que mostra a saída do console e a saída
unittest
da execução de teste:
Verificação de testes com o Depurador
Os testes de unidades são segmentos de código suscetíveis a bugs, como qualquer outro código, e às vezes requerem execução em um depurador. No Depurador do Visual Studio, é possível definir pontos de interrupção, analisar variáveis e examinar o código. O Visual Studio também fornece ferramentas de diagnóstico para testes de unidade.
Realize uma revisão destes pontos sobre como verificar os testes com o Depurador do Visual Studio:
Por padrão, a depuração de teste usa o depurador debugpy para a versão 16.5 e para versões posteriores do Visual Studio 2019. Algumas versões anteriores do Visual Studio usam o depurador ptvsd 4. Se você estiver usando uma versão anterior do Visual Studio e preferir o depurador ptvsd 3, selecione a opção Usar o Depurador Herdado em Ferramentas>Opções>Python>Depuração.
Para iniciar a depuração, defina um ponto de interrupção inicial no código, clique com o botão direito do mouse no teste (ou em uma seleção) no Gerenciador de Testes e escolha Depurar Testes Selecionados. O Visual Studio inicia o depurador do Python como faria com o código do aplicativo.
Se preferir, é possível usar Analisar Cobertura de Código para Testes Selecionados. Para obter mais informações, confira Usar a cobertura de código para determinar quanto do código está sendo testado.