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] Também na biblioteca
Trabalhando com CSV em C++: bibliotecas e exemplos de código
Guia completo Ramsey/UUID para PHP: instalação e exemplos
Trabalho com Arquivos ZIP em Java: guia completo sobre java.util.zip
deepkit/type para TypeScript: guia completo com exemplos
Processamento JSON em Swift: Codable, JSONSerialization e exemplos práticos