Gravar testes de unidade para C/C++ no Visual Studio

É possível gravar e executar testes de unidade para C++ usando a janela Gerenciador de Testes. Ele funciona exatamente como funciona para outros idiomas. Para saber mais sobre como usar o Gerenciador de Testes, consulte Executar testes de unidade com o Gerenciador de Testes.

Observação

Não há suporte para alguns recursos no C++, como o Live Unit Testing, Testes de Interface do Usuário Codificados e IntelliTest.

O Visual Studio inclui estas estruturas de teste para C++, sem a necessidade de fazer downloads extra:

  • Microsoft Unit Testing Framework para C/C++
  • Google Test
  • Boost.Test
  • CTest

Você pode usar as estruturas instaladas ou escrever seu adaptador de teste para qualquer estrutura que desejar usar no Visual Studio. Um adaptador de teste integra testes de unidade à janela Gerenciador de Testes. Vários adaptadores de terceiros são disponibilizados no Visual Studio Marketplace. Para saber mais, consulte Instalar estruturas de teste de unidade de terceiros.

Visual Studio 2017 e posterior (Professional e Enterprise)

Os projetos de teste de unidade C++ são compatíveis com o CodeLens.

Visual Studio 2017 e posterior (todas as edições)

  • O Adaptador do Google Test está incluído como componente padrão da carga de trabalho Desenvolvimento para área de trabalho com C++. Ele tem um modelo de projeto que você pode adicionar a uma solução. Clique com o botão direito do mouse no nó da solução no Gerenciador de Soluções e escolha Adicionar>Novo Projeto no menu de atalho para adicionar o modelo de projeto. Ele também tem opções que você pode configurar por meio de Ferramentas>Opções. Para saber mais, consulte Como usar o Google Test no Visual Studio.

  • Boost.Test está incluído como componente padrão da carga de trabalho Desenvolvimento para área de trabalho com C++. Ele é integrado ao Gerenciador de Testes, mas atualmente não tem um modelo de projeto. Ele precisa ser configurado manualmente. Para saber mais, consulte Como usar Boost.Test no Visual Studio.

  • O suporte para CTest está incluído no componente Ferramentas CMake para C++, que faz parte da carga de trabalho Desenvolvimento para desktop com C++. Para saber mais, consulte Como usar CTest no Visual Studio.

Versões Anteriores do Visual Studio

Baixe as extensões dos adaptadores Google Test e Boost.Test no Visual Studio Marketplace. Encontre-os em Adaptador de teste para Boost.Test e Adaptador de teste para Google Test.

Fluxo de trabalho básico de teste

As seções a seguir mostram as etapas básicas para começar os testes de unidade para C++. A configuração básica é semelhante para as estruturas da Microsoft e do Google Test. O Boost.Test requer a criação manual de um projeto de teste.

Criar um projeto de teste no Visual Studio 2022

Defina e execute testes de unidade dentro de um ou mais projetos de teste. Um projeto de teste cria um aplicativo separado que chama o código em seu executável e relata o comportamento dele. Crie projetos de teste na mesma solução que o código que você deseja testar.

Para adicionar um novo projeto de teste a uma solução existente,

  1. Clique com o botão direito do mouse no nó Solução no Gerenciador de Soluções.
  2. No menu pop-up, escolha Adicionar>Novo Projeto.
  3. Defina Linguagem como C++ e digite "teste" na caixa de pesquisa. A ilustração a seguir mostra os projetos de teste que estão disponíveis quando o Desenvolvimento de área de trabalho com C++ e a carga de trabalho Desenvolvimento de UWP estão instalados:

C++ Test Projects in Visual Studio 2022

Crie um projeto de teste no Visual Studio 2019

Defina e execute testes dentro de um ou mais projetos de teste. Crie os projetos na mesma solução que o código que você deseja testar. Para adicionar um novo projeto de teste a uma solução existente,

  1. Clique com o botão direito do mouse no nó Solução no Gerenciador de Soluções.
  2. No menu pop-up, escolha Adicionar>Novo Projeto.
  3. Defina Linguagem como C++ e digite "teste" na caixa de pesquisa. A ilustração a seguir mostra os projetos de teste que estão disponíveis quando o Desenvolvimento de área de trabalho com C++ e a carga de trabalho Desenvolvimento de UWP estão instalados:

C++ Test Projects in Visual Studio 2019

Criar referências a outros projetos na solução

Para habilitar o acesso às funções no projeto a ser testado, adicione uma referência ao projeto no projeto de teste. Clique com o botão direito do mouse no nó do projeto de teste no Gerenciador de Soluções para abrir um menu pop-up. Escolha Adicionar>Referência. Na caixa de diálogo Adicionar Referência, escolha os projetos que deseja testar.

Add reference

Se o código de teste não exportar as funções que você deseja testar, adicione os arquivos de saída .obj ou .lib para as dependências do projeto de teste. Para obter mais informações, consulte Como vincular os testes aos arquivos de biblioteca ou objeto. Não inclua arquivos de objeto que tenham uma função main ou outro ponto de entrada padrão, como wmain, WinMain ou DllMain. Ao adicionar novos arquivos de origem ao projeto, atualize as dependências do projeto de teste para incluir os arquivos de objeto correspondentes.

Adicionar diretivas de inclusão aos arquivos de cabeçalho

Em seguida, no arquivo .cpp do teste de unidade, adicione uma diretiva #include a todos os arquivos de cabeçalho que declaram os tipos e as funções que você deseja testar. Digite #include " e o IntelliSense será ativado para ajudar você a escolher. Repita para mais cabeçalhos.

Screenshot of the Solution Explorer showing an #include directive being added with IntelliSense highlighting a header file for inclusion.

Para evitar a necessidade de digitar o caminho completo em cada instrução include no arquivo de origem, adicione as pastas necessárias em Projeto>Propriedades>C/C++>Geral>Diretórios Include Adicionais.

Gravar métodos de teste

Observação

Esta seção mostra a sintaxe da Microsoft Unit Testing Framework para C/C++. Ela está documentada na Referência de API do Microsoft.VisualStudio.TestTools.CppUnitTestFramework. Para obter a documentação do Google Test, confira Prévia do Google Test. Quanto ao Boost.Test, confira Biblioteca do Boost Test: a estrutura de teste de unidade.

O arquivo .cpp no projeto de teste tem um método e uma classe stub definidos para você. Eles mostram um exemplo de como escrever código de teste. As assinaturas usam as macros TEST_CLASS e TEST_METHOD, o que possibilita a descoberta dos métodos por meio da janela Gerenciador de Testes.

Screenshot of the Test Explorer window that shows the unittest1.cpp code file containing a stub class and method using the TEST_CLASS and TEST_METHOD macros.

TEST_CLASS e TEST_METHOD fazem parte do Framework de Teste Nativo da Microsoft. O Gerenciador de Testes descobre os métodos de teste em outras estruturas com suporte, de maneira semelhante.

Um TEST_METHOD retorna nulo. Para produzir um resultado do teste, use os métodos estáticos na classe Assert para testar os resultados reais em relação aos esperados. No exemplo a seguir, considere que MyClass tem um construtor que usa uma std::string. Este exemplo mostra como você pode testar se o construtor inicializa a classe da maneira esperada:

TEST_METHOD(TestClassInit)
{
    std::string name = "Bill";
    MyClass mc(name);
    Assert::AreEqual(name, mc.GetName());
}

No exemplo anterior, o resultado da chamada Assert::AreEqual determina o resultado do teste: aprovação ou falha. A classe Assert contém muitos outros métodos para comparar os resultados esperados com os resultados reais.

É possível adicionar características aos métodos de teste a fim de especificar os proprietários do teste, a prioridade e outras informações. Depois, é possível usar esses valores para classificar e agrupar os testes no Gerenciador de Testes. Para obter mais informações, consulte Executar testes de unidade com o Gerenciador de Testes.

Executar os testes

  1. No menu Teste, escolha Windows>Gerenciador de Testes. A ilustração a seguir mostra um projeto de teste cujos testes ainda não foram executados.

    Test Explorer before running tests

    Observação

    A integração do CTest com o Gerenciador de Testes ainda não está disponível. Execute testes de CTest no menu principal do CMake.

  2. Se algum dos testes estiver ausente da janela, crie o projeto de teste clicando com o botão direito no mouse no nó do Gerenciador de Soluções e escolhendo Criar ou Recompilar.

  3. No Gerenciador de Testes, escolha Executar Todos ou selecione os testes específicos que deseja executar. Clique com o botão direito do mouse para ver outras opções, incluindo a execução em modo de depuração com pontos de interrupção habilitados. Depois que todos os testes são executados, a janela mostra os testes aprovados e os que falharam.

    Test Explorer after tests are run

Para testes com falha, a mensagem exibe detalhes que ajudam a diagnosticar a causa. Clique com o botão direito do mouse no teste com falha para abrir um menu pop-up. Escolha Depurar para percorrer a função em que ocorreu a falha.

Para saber mais sobre como usar o Gerenciador de Testes, consulte Executar testes de unidade com o Gerenciador de Testes.

Para obter mais informações sobre testes de unidade, consulte Noções básicas de teste de unidade.

Usar o CodeLens

Visual Studio 2017 e posterior (edições Professional e Enterprise)

O CodeLens permite que você veja rapidamente o status de um teste de unidade sem sair do editor de códigos.

Inicialize o CodeLens para um projeto de teste de unidade do C++ de qualquer uma das seguintes formas:

  • Editar e compilar sua solução ou projeto de teste.
  • Recompilar sua solução ou projeto.
  • Execute testes na janela do Gerenciador de Testes.

Após ele ser inicializado, você poderá ver os ícones de status de teste acima de cada teste de unidade.

C++ CodeLens Icons

Escolha o ícone para obter mais informações ou para executar ou depurar o teste de unidade:

C++ CodeLens Run and Debug