Introdução: O que são Catch2 e Google Test e para que servem?
\n\nNo desenvolvimento moderno de software em C++, os testes não são um luxo, mas uma necessidade. As bibliotecas de teste unitário (unit testing) permitem que os desenvolvedores verifiquem automaticamente se componentes individuais do programa (funções, classes, módulos) funcionam corretamente. As duas bibliotecas mais populares para esse fim são Catch2 e Google Test (gtest).
\n\nCatch2 é uma biblioteca moderna, leve e muito conveniente para testes unitários. Sua principal característica é o uso de macros que tornam os testes legíveis e semelhantes ao inglês comum. O Catch2 suporta o estilo Behaviour-Driven Development (BDD), registro automático de testes e não requer configuração complexa.
\n\nGoogle Test (gtest) é uma biblioteca poderosa e madura do Google, que é o padrão de facto em muitos projetos grandes. Ela oferece um rico conjunto de macros de assertion, mecanismos para criar fixtures (test fixtures), testes parametrizados e excelente integração com o sistema de build CMake.
\n\nAmbas as bibliotecas resolvem a mesma tarefa: permitem escrever testes que são executados automaticamente e relatam os resultados. A escolha entre elas geralmente depende de preferências pessoais, requisitos do projeto ou infraestrutura existente. Neste artigo, abordaremos ambas as bibliotecas, pois são muito semelhantes em conceito, mas possuem diferenças na sintaxe e na API.
\n\nInstalação
\n\nAo contrário do Python (onde se usa pip), a instalação de bibliotecas para C++ geralmente ocorre por meio de gerenciadores de pacotes do sistema ou por integração com o sistema de build (por exemplo, CMake). Vamos considerar ambas as opções.
\n\nInstalação do Catch2
\nMétodo 1: Via vcpkg (recomendado)
\n# Instale o vcpkg, se ainda não estiver instalado\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh # ou .\\bootstrap-vcpkg.bat no Windows\n\n# Instale o Catch2\n./vcpkg install catch2\n\n# Integração com CMake\n./vcpkg integrate install\n\nMétodo 2: Header-only (o mais simples)
\nO Catch2 pode ser usado como uma biblioteca header-only. Basta baixar o arquivo catch.hpp do repositório oficial e colocá-lo na pasta do projeto. Em seguida, inclua-o no código:
#define CATCH_CONFIG_MAIN // Esta linha deve estar em apenas um arquivo .cpp\n#include "catch.hpp"\n\nInstalação do Google Test
\nMétodo 1: Via vcpkg
\n./vcpkg install gtest\n./vcpkg integrate install\n\nMétodo 2: Via CMake FetchContent (recomendado para projetos com CMake)
\nAdicione ao seu CMakeLists.txt:
include(FetchContent)\nFetchContent_Declare(\n googletest\n GIT_REPOSITORY https://github.com/google/googletest.git\n GIT_TAG release-1.12.1\n)\nFetchContent_MakeAvailable(googletest)\n\n# Agora você pode usar target_link_libraries para seu arquivo de teste\nadd_executable(my_tests test.cpp)\ntarget_link_libraries(my_tests GTest::gtest_main)\n\nInício rápido com exemplo de código
\n\nVamos escrever uma função simples e testá-la com ambas as bibliotecas. A função calculará o fatorial de um número.
\n\nExemplo com Catch2
\n#define CATCH_CONFIG_MAIN\n#include "catch.hpp"\n\n// Função para testar\nunsigned int factorial(unsigned int n) {\n if (n == 0) return 1;\n return n * factorial(n - 1);\n}\n\n// Caso de teste\nTEST_CASE("Fatoriais são calculados corretamente", "[factorial]") {\n REQUIRE(factorial(0) == 1);\n REQUIRE(factorial(1) == 1);\n REQUIRE(factorial(2) == 2);\n REQUIRE(factorial(3) == 6);\n REQUIRE(factorial(10) == 3628800);\n}\n\n// Outro caso de teste com seções\nTEST_CASE("Verificação de casos limite", "[factorial][edge]") {\n SECTIO