Introducción: ¿Qué son Catch2 y Google Test y para qué sirven?
\n\nEn el desarrollo moderno de software en C++, las pruebas no son un lujo, sino una necesidad. Las bibliotecas de pruebas unitarias (unit testing) permiten a los desarrolladores verificar automáticamente que los componentes individuales del programa (funciones, clases, módulos) funcionen correctamente. Las dos bibliotecas más populares para este propósito son Catch2 y Google Test (gtest).
\n\nCatch2 es una biblioteca moderna, ligera y muy conveniente para pruebas unitarias. Su característica principal es el uso de macros que hacen que las pruebas sean legibles y se asemejen al inglés común. Catch2 admite el estilo Behaviour-Driven Development (BDD), el registro automático de pruebas y no requiere una configuración compleja.
\n\nGoogle Test (gtest) es una biblioteca potente y madura de Google, que es el estándar de facto en muchos proyectos grandes. Ofrece un rico conjunto de macros de aserción (assertion), mecanismos para crear fixtures de prueba (test fixtures), pruebas parametrizadas y una excelente integración con el sistema de compilación CMake.
\n\nAmbas bibliotecas resuelven la misma tarea: permiten escribir pruebas que se ejecutan automáticamente e informan los resultados. La elección entre ellas a menudo depende de las preferencias personales, los requisitos del proyecto o la infraestructura existente. En este artículo, analizaremos ambas bibliotecas, ya que son muy similares en concepto, pero tienen diferencias en sintaxis y API.
\n\nInstalación
\n\nA diferencia de Python (donde se usa pip), la instalación de bibliotecas para C++ generalmente se realiza a través de gestores de paquetes del sistema o mediante la integración con el sistema de compilación (por ejemplo, CMake). Consideremos ambas opciones.
\n\nInstalación de Catch2
\nMétodo 1: A través de vcpkg (recomendado)
\n# Instale vcpkg si aún no está instalado\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh # o .\\bootstrap-vcpkg.bat en Windows\n\n# Instale Catch2\n./vcpkg install catch2\n\n# Integración con CMake\n./vcpkg integrate install\n\nMétodo 2: Header-only (el más simple)
\nCatch2 se puede usar como una biblioteca header-only. Simplemente descargue el archivo catch.hpp del repositorio oficial y colóquelo en la carpeta de su proyecto. Luego, inclúyalo en el código:
#define CATCH_CONFIG_MAIN // Esta línea debe estar solo en un archivo .cpp\n#include "catch.hpp"\n\nInstalación de Google Test
\nMétodo 1: A través de vcpkg
\n./vcpkg install gtest\n./vcpkg integrate install\n\nMétodo 2: A través de CMake FetchContent (recomendado para proyectos con CMake)
\nAgregue a su 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# Ahora puede usar target_link_libraries para su archivo de prueba\nadd_executable(my_tests test.cpp)\ntarget_link_libraries(my_tests GTest::gtest_main)\n\nInicio rápido con un ejemplo de código
\n\nEscribamos una función simple y probémosla con ambas bibliotecas. La función calculará el factorial de un número.
\n\nEjemplo con Catch2
\n#define CATCH_CONFIG_MAIN\n#include "catch.hpp"\n\n// Función a probar\nunsigned int factorial(unsigned int n) {\n if (n == 0) return 1;\n return n * factorial(n - 1);\n}\n\n// Caso de prueba\nTEST_CASE("Los factoriales se calculan correctamente", "[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// Otro caso de prueba con secciones\nTEST_CASE("Verificación de casos límite", "[factorial][edge]") {\n SECTIO