Usar o Boost.Test para C++ no Visual Studio

No Visual Studio 2017 e posterior, o adaptador de teste Boost.Test é integrado ao IDE do Visual Studio. Ele é um componente do desenvolvimento da carga de trabalho Desenvolvimento de área de trabalho com C++.

Test Adapter for Boost.Test

Se você não tiver a carga de trabalho Desenvolvimento para desktop com C++ instalada, abra o Instalador do Visual Studio. Selecione a carga de trabalho Desenvolvimento para desktop com C++ e escolha o botão Modificar.

Instalar o Boost

O Boost.Test exige o Boost! Se o Boost não estiver instalado, recomendamos o uso do gerenciador de pacotes Vcpkg.

  1. Siga as instruções de Vcpkg: um gerenciador de pacotes C++ para o Windows para instalar o vcpkg (caso ainda não o tenha).

  2. Instale a biblioteca Boost.Test dinâmica ou estática:

    • Execute vcpkg install boost-test para instalar a biblioteca Boost.Test dinâmica.

      -OU-

    • Execute vcpkg install boost-test:x86-windows-static para instalar a biblioteca Boost.Test estática.

  3. Execute vcpkg integrate install para configurar o Visual Studio com a biblioteca e incluir caminhos para os cabeçalhos e os binários do Boost.

Você tem uma opção de como configurar seus testes em sua solução no Visual Studio: é possível incluir seu código de teste no projeto em teste ou criar um projeto de teste separado para seus testes. Ambas as opções têm vantagens e desvantagens.

Adicionar testes dentro de seu projeto

No Visual Studio 2017 versão 15.6 e posterior, você pode adicionar um modelo de item para testes em seu projeto. Os testes e seu código residem no mesmo projeto. Você precisará criar uma configuração de build separada para gerar um build de teste. Além disso, você precisará manter os testes fora dos builds de depuração e versão.

No Visual Studio 2017 versão 15.5, não há nenhum modelo de projeto de teste ou de item pré-configurado disponível para o Boost.Test. Use as instruções para criar e configurar um projeto de teste separado.

Criar um item Boost.Test

  1. Para criar um arquivo .cpp para seus testes, clique com o botão direito do mouse no nó do projeto no Gerenciador de Soluções e escolha Adicionar>Novo Item.

  2. Na caixa de diálogo Adicionar Novo Item, expanda Instalado>Visual C++>Teste. Selecione Boost.Teste escolha Adicionar para adicionar Test.cpp ao seu projeto.

    Boost.Test Item Template

O novo arquivo Test.cpp contém um método de teste de exemplo. Esse arquivo é onde você pode incluir seus próprios arquivos de cabeçalho e gravar testes para seu aplicativo.

O arquivo de teste também usa macros a fim de definir uma nova rotina main para configurações de teste. Se você compilar seu projeto agora, verá um erro LNK2005, como "_main já definido em main.obj".

Criar e atualizar configurações de build

  1. Para criar uma configuração de teste, na barra de menus, selecione Build>Configuration Manager. No diálogo Configuration Manager, abra a lista suspensa na Configuração da solução ativa e escolha Novo. No diálogo Nova Configuração de Solução, insira um nome, por exemplo, "Depurar UnitTests". Em Copiar configurações de, selecione Depurar e escolha OK.

  2. Exclua o código de teste das configurações de Depuração e Versão: no Gerenciador de Soluções, clique com o botão direito do mouse em Test.cpp e selecione Propriedades. Na caixa de diálogo Páginas de Propriedades, selecione Todas as Configurações na lista suspensa Configuração. Selecione Propriedades de Configuração>Geral e abra a lista suspensa para a propriedade Excluído da Compilação. Selecione Sime escolha Aplicar para salvar suas alterações.

  3. Para incluir o código de teste na configuração UnitTests de depuração, no diálogo Páginas de Propriedades, selecione Depurar UnitTests na lista suspensa Configuração . Selecione Não na propriedade Excluído da Compilação e escolha OK para salvar suas alterações.

  4. Exclua o código principal de sua configuração de UnitTests de depuração. No Gerenciador de Soluções, clique com o botão direito do mouse no arquivo que contém sua função main e selecione Propriedades. Na caixa de diálogo Páginas de Propriedades, selecione Depurar UnitTests na lista suspensa Configuração. Selecione Propriedades de Configuração>Geral e abra a lista suspensa para a propriedade Excluído da Compilação. Selecione Sim e escolha OK para salvar suas alterações.

  5. Defina a Configuração da Solução como Depurar UnitTestse crie seu projeto para permitir que o Gerenciador de Testes descubra o método.

Se o nome de configuração criado começar com as palavras "Depurar" ou "Versão", as bibliotecas correspondentes do Boost.Test serão selecionadas automaticamente.

O modelo de item usa a variante de cabeçalho único do Boost.Test, mas você pode modificar o caminho #include a fim de usar a variante de biblioteca autônoma. Para saber mais, confira Adicionar diretivas de inclusão.

Criar um projeto de teste separado

Em muitos casos, é mais fácil usar um projeto separado para seus testes. Você não precisará criar uma configuração de teste especial para seu projeto. Ou exclua os arquivos de teste dos builds de Depuração e Versão.

Para criar um projeto de teste separado

  1. No Gerenciador de Soluções, clique com o botão direito do mouse no nó da solução e escolha Adicionar>Novo Projeto.

  2. No diálogo Adicionar um novo projeto, escolha C++, Windows e Console nas listas suspensas de filtro. Selecione o modelo Aplicativo de Console e escolha Avançar.

  3. Dê um nome ao projeto e escolha Criar.

  4. Exclua a função main do arquivo .cpp.

  5. Se você estiver usando a versão da biblioteca de cabeçalho único ou dinâmica de Boost.Test, vá até Adicionar diretivas de inclusão. Se você estiver usando a versão da biblioteca estática, será necessário realizar outras configurações:

    a. Para editar o arquivo de projeto, primeiro descarregue-o. No Gerenciador de Soluções, clique com o botão direito do mouse no nó do projeto e escolha Descarregar Projeto. Em seguida, clique com o botão direito do mouse no nó do projeto e escolha Editar <name.vcxproj>.

    b. Adicione duas linhas no grupo de propriedades Globais, como é mostrado aqui:

    <PropertyGroup Label="Globals">
    ....
        <VcpkgTriplet>x86-windows-static</VcpkgTriplet>
        <VcpkgEnabled>true</VcpkgEnabled>
    </PropertyGroup>
    

    c. Salve e feche o arquivo *.vcxproj e, em seguida, recarregue o projeto.

    d. Para abrir a Páginas de Propriedades, clique com o botão direito do mouse no nó do projeto e escolha Propriedades.

    e. Expanda C/C++>Geração de Código e, em seguida, selecione Biblioteca em Runtime. Selecione /MTd para depurar a biblioteca de runtime estática ou /MT para liberar a biblioteca de runtime estática.

    f. Expanda Vinculador>Sistema. Verifique se Subsistema está definido como Console.

    g. Escolha OK para fechar as páginas de propriedades.

Adicionar diretivas de inclusão

  1. No arquivo .cpp de teste, adicione as diretivas #include necessárias para que os tipos e as funções do programa fiquem visíveis para o código de teste. Se você estiver usando um projeto de teste separado, normalmente o programa estará em um nível irmão na hierarquia de pastas. Se você digitar #include "../", uma janela do IntelliSense será exibida e permitirá que você selecione o caminho completo para o arquivo de cabeçalho.

    Add #include directives

    Você pode usar a biblioteca autônoma com:

    #include <boost/test/unit_test.hpp>
    

    Ou, use a versão de cabeçalho único com:

    #include <boost/test/included/unit_test.hpp>
    

    Em seguida, defina BOOST_TEST_MODULE.

O exemplo a seguir é suficiente para que o teste seja detectável no Gerenciador de Testes:

#define BOOST_TEST_MODULE MyTest
#include <boost/test/included/unit_test.hpp> //single-header
#include "../MyProgram/MyClass.h" // project being tested
#include <string>

BOOST_AUTO_TEST_CASE(my_boost_test)
{
    std::string expected_value = "Bill";

    // assume MyClass is defined in MyClass.h
    // and get_value() has public accessibility
    MyClass mc;
    BOOST_CHECK(expected_value == mc.get_value());
}

Gravar e executar testes

Agora, você está pronto para escrever e executar testes do Boost. Confira a documentação da Biblioteca do Boost Test para obter informações sobre as macros de teste. Consulte Executar testes de unidade com o Gerenciador de Testes para saber mais sobre como descobrir, executar e agrupar testes usando o Gerenciador de Testes.