doctest para C++: guía completa con ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

doctest para C++: guía completa con ejemplos prácticos

1. ¿Qué es y para qué sirve?

doctest es un framework ligero y autodocumentado para pruebas unitarias en C++. Su principal ventaja es el mínimo tiempo de compilación y su facilidad de uso. A diferencia de frameworks más pesados como Google Test o Boost.Test, doctest es una biblioteca de solo cabecera (header-only) que se incluye con una sola línea #include <doctest/doctest.h>. Esto lo convierte en la opción ideal para proyectos donde la velocidad de compilación y la ausencia de dependencias externas son críticas.

¿Para qué sirve doctest? En el desarrollo moderno con C++, probar el código no es un lujo, sino una necesidad. doctest permite escribir pruebas justo al lado de la implementación de las funciones, mejorando la legibilidad del código y facilitando su mantenimiento. Puedes incrustar pruebas en archivos de cabecera, y se excluirán automáticamente de la compilación final si no se usa la bandera -DDOCTEST_CONFIG_DISABLE. Esto ofrece una ventaja única: las pruebas viven junto al código sin afectar el rendimiento de la versión de producción.

doctest es compatible con todos los estándares modernos de C++ (C++11 en adelante), funciona en las principales plataformas (Windows, Linux, macOS) y se integra fácilmente con sistemas de integración continua (CI). Proporciona un amplio conjunto de macros para verificar aserciones, agrupar pruebas, manejar excepciones y generar informes. Gracias a su ligereza, doctest se usa a menudo en desarrollo embebido, motores de videojuegos y otros proyectos donde cada kilobyte y milisegundo de compilación cuenta.

2. Instalación

doctest es una biblioteca header-only, por lo que la instalación se reduce a copiar el archivo de cabecera en tu proyecto. La forma más sencilla es usar el gestor de paquetes vcpkg o Conan, o descargar el archivo manualmente.

Opción 1: Instalación con vcpkg (recomendada)

# Instala vcpkg si aún no lo has hecho:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh  # Linux/macOS
# o .\bootstrap-vcpkg.bat (Windows)

# Instala doctest:
./vcpkg install doctest

# Conéctalo a tu proyecto con CMake:
# find_package(doctest CONFIG REQUIRED)
# target_link_libraries(tu_target PRIVATE doctest::doctest)

Opción 2: Instalación con Conan

# Añade a conanfile.txt:
[requires]
doctest/2.4.11

[generators]
cmake

# Instala:
conan install . --build=missing

Opción 3: Instalación manual (solo copiar el archivo)

# Descarga la última versión desde GitHub:
wget https://raw.githubusercontent.com/doctest/doctest/master/doctest/doctest.h

# Coloca el archivo en la carpeta include de tu proyecto
# Luego en el código solo usa:
# #include "doctest.h"

Después de la instalación, asegúrate de que el compilador pueda encontrar el archivo de cabecera. Para compilar las pruebas, basta con cualquier versión moderna de GCC, Clang o MSVC.

3. Inicio rápido: ejemplo mínimo funcional

Crea un archivo test_ejemplo.cpp con el siguiente contenido:

#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest.h"

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

TEST_CASE("probando la función factorial") {
    CHECK(factorial(0) == 1);
    CHECK(factorial(1) == 1);
    CHECK(factorial(5) == 120);
    CHECK(factorial(10) == 3628800);
}

Compila y ejecuta:

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

Verás la siguiente salida:

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

Recommendations