doctest para C++: guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

doctest para C++: guia completo com exemplos práticos

1. O que é e para que serve?

doctest é um framework leve e autodocumentado para testes unitários em C++. Sua principal característica é o tempo mínimo de compilação e a simplicidade de uso. Diferente de frameworks mais pesados, como Google Test ou Boost.Test, o doctest é uma biblioteca header-only, que pode ser incluída com uma única linha #include <doctest/doctest.h>. Isso o torna a escolha ideal para projetos onde a velocidade de compilação e a ausência de dependências externas são essenciais.

Para que serve o doctest? No desenvolvimento moderno em C++, testar o código não é um luxo, mas uma necessidade. O doctest permite escrever testes diretamente ao lado da implementação das funções, melhorando a legibilidade do código e facilitando sua manutenção. Você pode incorporar testes em arquivos de cabeçalho, e eles serão automaticamente excluídos da compilação final se a flag -DDOCTEST_CONFIG_DISABLE não for usada. Isso oferece uma vantagem única: os testes vivem junto com o código, sem afetar o desempenho da versão de produção.

O doctest suporta todos os padrões modernos de C++ (C++11 e superiores), funciona em todas as principais plataformas (Windows, Linux, macOS) e se integra facilmente com sistemas de integração contínua (CI). Ele fornece um rico conjunto de macros para verificar asserções, agrupar testes, lidar com exceções e gerar relatórios. Devido à sua leveza, o doctest é frequentemente usado em desenvolvimento embarcado, motores de jogos e outros projetos onde cada kilobyte e milissegundo de compilação conta.

2. Instalação

O doctest é uma biblioteca header-only, portanto a instalação se resume a copiar o arquivo de cabeçalho para o seu projeto. A maneira mais simples é usar o gerenciador de pacotes vcpkg ou Conan, ou baixar o arquivo manualmente.

Opção 1: Instalação via vcpkg (recomendada)

# Instale o vcpkg, se ainda não o fez:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh  # Linux/macOS
# ou .\bootstrap-vcpkg.bat (Windows)

# Instale o doctest:
./vcpkg install doctest

# Conecte ao projeto via CMake:
# find_package(doctest CONFIG REQUIRED)
# target_link_libraries(seu_target PRIVATE doctest::doctest)

Opção 2: Instalação via Conan

# Adicione ao conanfile.txt:
[requires]
doctest/2.4.11

[generators]
cmake

# Instale:
conan install . --build=missing

Opção 3: Instalação manual (apenas copie o arquivo)

# Baixe a versão mais recente do GitHub:
wget https://raw.githubusercontent.com/doctest/doctest/master/doctest/doctest.h

# Coloque o arquivo na pasta include do seu projeto
# Depois, no código, basta usar:
# #include "doctest.h"

Após a instalação, certifique-se de que o compilador consegue encontrar o arquivo de cabeçalho. Para compilar os testes, qualquer versão moderna do GCC, Clang ou MSVC é suficiente.

3. Início rápido — exemplo mínimo funcional

Crie um arquivo test_exemplo.cpp com o seguinte conteúdo:

#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest.h"

int fatorial(int n) {
    if (n <= 1) return 1;
    return n * fatorial(n - 1);
}

TEST_CASE("testando a função fatorial") {
    CHECK(fatorial(0) == 1);
    CHECK(fatorial(1) == 1);
    CHECK(fatorial(5) == 120);
    CHECK(fatorial(10) == 3628800);
}

Compile e execute:

g++ -std=c++11 test_exemplo.cpp -o test_exemplo
./test_exemplo

Você verá a saída:

===========================================================================
[doctest] test cases:    1 |    1 passed |    0 failed |    0 skipped
[doctest] assertions:    4 |    4 passed |    0 failed |
[doctest]                    

Recommendations