Compartilhar via


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

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:

  1. No Gerenciador de Soluções, clique com o botão direito do mouse no nome do projeto e selecione Propriedades.

  2. 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, como test*.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, como test_*.py.

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

  1. Abra o código Python existente ao usar a opção Abrir uma Pasta Local:

    Captura de tela que mostra como selecionar a opção Abrir uma pasta local quando o Visual Studio 2022 é iniciado.

    Captura de tela que mostra como selecionar a opção Abrir uma pasta local quando o Visual Studio é iniciado.

  2. 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:

    Captura de tela que mostra como exibir pastas e arquivos ocultos no Gerenciador de Soluções no Visual Studio 2022.

    Captura de tela que mostra como exibir pastas e arquivos ocultos no Gerenciador de Soluções no Visual Studio.

  3. 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:

    1. Clique com o botão direito do mouse na pasta Configurações Locais e selecione Adicionar>Novo Arquivo.

    2. Nomeie o arquivo PythonSettings.json e selecione Enter para salvar as alterações.

    O Visual Studio abre automaticamente o novo arquivo no editor.

  4. 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 e UnitTestPattern no arquivo PythonSettings.json, o Visual Studio adicionará automaticamente esses campos com os valores padrão de . e test*.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.

  5. 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"]
    
  6. 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:

  1. Abra um projeto em Python no Visual Studio.

  2. Configure as Propriedades da estrutura de teste para o projeto, conforme descrito em Seleção da estrutura de teste para um projeto em Python.

  3. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Adicionar>Novo Item.

    1. Na caixa de diálogo Adicionar Novo Item, selecione o tipo de arquivo Teste de Unidade em Python.

    2. Insira um nome do arquivo que satisfaça a definição do Padrão especificada para as Propriedades do projeto.

    3. Selecione Adicionar.

  4. 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étodo unittest.TestCase. Ao executar o script diretamente, esse código também invoca a função unittest.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:

    Captura de tela que mostra a exibição padrão para um teste no Gerenciador de Testes no Visual Studio 2022.

    Captura de tela que mostra a exibição padrão para um teste no Gerenciador de Testes.

  • Organize a exibição dos testes ao usar a opção Agrupar por na barra de ferramentas:

    Captura de tela que mostra como organizar a exibição de testes no Gerenciador de Testes com a opção Agrupar por no Visual Studio 2022.

    Captura de tela que mostra como organizar a exibição de testes no Gerenciador de Testes com a opção Agrupar por.

  • Filtre os testes por nome ao inserir texto no campo Pesquisar:

    Captura de tela que mostra como filtrar a exibição de testes no Gerenciador de Testes ao usar o campo Pesquisar.

    Captura de tela que mostra como filtrar a exibição de testes no Gerenciador de Testes ao usar o 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:

    Captura de tela que mostra o status para um teste aprovado no Gerenciador de Testes no Visual Studio 2022.

    Captura de tela que mostra o status para um teste aprovado no Gerenciador de Testes.

  • 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:

    Captura de tela que mostra os detalhes do status e do motivo para um teste com falha no Gerenciador de Testes no Visual Studio 2022.

    Captura de tela que mostra o status para um teste com falha no Gerenciador de Testes.

    Captura de tela que mostra o motivo para um teste com falha no Gerenciador de Testes.

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.

    Captura de tela que mostra como depurar um teste de unidade com o Depurador do Visual Studio 2022.

    Captura de tela que mostra como depurar um teste de unidade com o Depurador do Visual Studio.

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