Aserciones y matchers
Escriba comprobaciones expresivas
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úaASSERT_*: 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_NEEXPECT_LT,EXPECT_LEEXPECT_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,LtContains,ElementsAre,UnorderedElementsAreHasSubstr,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
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
- Configuración de GTest
- Aserciones y matchers
- Fixtures y configuración
- Mocking con GMock