C++ Academy · Lección

Aserciones y matchers

Escriba comprobaciones expresivas

Lección 2 de 413 pasos

Aserciones y matchers es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

Las aserciones expresan expectativas

Las aserciones de GTest comprueban condiciones dentro de una prueba. Tienen dos niveles de severidad.

  • EXPECT_*: registra el fallo y la prueba continúa
  • ASSERT_*: el fallo detiene inmediatamente la prueba actual

EXPECT frente a ASSERT

Utilice ASSERT_* cuando continuar pudiera provocar un fallo, por ejemplo, después de comprobar un puntero nulo, y EXPECT_* en los demás casos para ver todos los fallos a la vez.

#include <gtest/gtest.h>

TEST(Demo, MixedChecks) {
    int* p = new int(5);
    ASSERT_NE(p, nullptr);
    EXPECT_EQ(*p, 5);
    delete p;
}

Aserciones de comparación

Las macros de comparación principales:

  • EXPECT_EQ, EXPECT_NE
  • EXPECT_LT, EXPECT_LE
  • EXPECT_GT, EXPECT_GE
#include <gtest/gtest.h>

TEST(Compare, Numbers) {
    EXPECT_LT(2, 3);
    EXPECT_GE(5, 5);
}

Aserciones booleanas

EXPECT_TRUE y EXPECT_FALSE comprueban directamente condiciones booleanas.

#include <gtest/gtest.h>

bool is_even(int n) { return n % 2 == 0; }

TEST(Bool, Even) {
    EXPECT_TRUE(is_even(4));
    EXPECT_FALSE(is_even(3));
}

Comparaciones de números de coma flotante

No utilice nunca EXPECT_EQ con números de coma flotante. Utilice EXPECT_FLOAT_EQ, EXPECT_DOUBLE_EQ o EXPECT_NEAR con una tolerancia.

#include <gtest/gtest.h>

TEST(Floats, Approx) {
    EXPECT_DOUBLE_EQ(0.1 + 0.2, 0.3);
    EXPECT_NEAR(3.14159, 3.14, 0.01);
}

Aserciones de cadenas

Para cadenas C, utilice EXPECT_STREQ / EXPECT_STRNE. Para std::string, EXPECT_EQ funciona porque compara por valor.

#include <gtest/gtest.h>
#include <string>

TEST(Strings, Compare) {
    EXPECT_STREQ("hi", "hi");
    EXPECT_EQ(std::string("ok"), "ok");
}

Aserciones de excepciones

Compruebe que el código lanza la excepción esperada.

#include <gtest/gtest.h>
#include <stdexcept>

void check(int n) {
    if (n < 0) throw std::runtime_error("neg");
}

TEST(Throws, Negative) {
    EXPECT_THROW(check(-1), std::runtime_error);
    EXPECT_NO_THROW(check(1));
}

Mensajes de fallo personalizados

Añada contexto adicional a una aserción mediante << para facilitar el diagnóstico de los fallos.

#include <gtest/gtest.h>

TEST(Message, WithContext) {
    int x = 7;
    EXPECT_EQ(x, 7) << "x had unexpected value " << x;
}

Matchers de GMock con EXPECT_THAT

EXPECT_THAT combina un valor con un matcher para realizar comprobaciones expresivas, por ejemplo, EXPECT_THAT(v, ElementsAre(1, 2, 3)).

#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <vector>
using ::testing::ElementsAre;

TEST(Matchers, Vector) {
    std::vector<int> v{1, 2, 3};
    EXPECT_THAT(v, ElementsAre(1, 2, 3));
}

Matchers útiles

Entre los matchers habituales se incluyen:

  • Eq, Ne, Gt, Lt
  • Contains, ElementsAre, UnorderedElementsAre
  • HasSubstr, StartsWith, EndsWith

Elegir la aserción adecuada

Prefiera la aserción más específica: produce mensajes de fallo más claros que un EXPECT_TRUE genérico. EXPECT_EQ(a, b) muestra ambos valores; EXPECT_TRUE(a == b) no los muestra.

Comprobación rápida

Recuerde la diferencia entre EXPECT y ASSERT.

Resumen

Ha aprendido las aserciones de GTest.

  • EXPECT_* continúa; ASSERT_* cancela la prueba
  • Macros de comparación, booleanas, de números de coma flotante, de cadenas y de excepciones
  • Transmita contexto adicional con <<
  • EXPECT_THAT + matchers para realizar comprobaciones expresivas
Gratis para empezar

Aprende C++ con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
51
Lecciones
203

Preguntas frecuentes

¿La lección «Aserciones y matchers» es gratis?

Sí — el texto completo de «Aserciones y matchers» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Aserciones y matchers»?

Escriba comprobaciones expresivas Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Aserciones y matchers»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Configuración de GTest
  2. Aserciones y matchers
  3. Fixtures y configuración
  4. Mocking con GMock
← Volver a C++ Academy