¿Cómo probar una clase con Google Test?
Estoy aprendiendo Google Test, tengo una clase y quiero probar su función miembro, a continuación está el código de muestra:
class B {
//......
};
class A {
public:
//.....
void add(string s, B* ptrb) { m.insert(s, ptrb); }
void remove(string s) {
auto it = m.find(s);
if (it != m.end())
m.erase(it);
}
B* operator[](string s)
{
auto it = m.find(s);
if (it != m.end())
return (*it).second;
}
//.....
protected:
map<b*> m;
//.....
}
si quiero probar add
de la siguiente manera:
class mygtest : public ::testing::Test
{
protected:
//....configuración
//....limpieza
A a;
};
TEST_F(mygtest, testadd)
{
B b1;
B b2;
a.add("1", &b1);
a.add("2", &b2);
//... ¿cómo debo continuar?
EXPECT_EQ(.....) //¿comparar con qué?
}
Esta es la primera pregunta.
La segunda pregunta es:
En algunas condiciones, tengo que llamar a otra función miembro para obtener un valor primero y luego usar EXPECT_EQ
para probar la función miembro actual, ¿cómo probar una función sin usar otra función miembro? ¿Si es necesario?</b*>
davy.ai
Respuesta
Primera pregunta
Para probar la función
add
, la forma más fácil es recuperar el punteroB*
insertado en el mapa y luego compararlo con el valor esperado usandoEXPECT_EQ
. Aquí hay un ejemplo:Segunda pregunta
Idealmente, cada función miembro se debería probar de forma independiente, sin depender de otras funciones miembro. Sin embargo, en algunos casos, puede ser necesario llamar a otras funciones miembro para configurar el entorno de prueba.
Si necesitas llamar a otra función miembro para obtener un valor antes de probar la función miembro actual, puedes hacerlo en la función
SetUp
del fixturemygtest
. Aquí hay un ejemplo:Ten en cuenta que generalmente es mejor mantener cada caso de prueba lo más sencillo posible, por lo que si puedes evitar depender de otras funciones miembro, es preferible hacerlo.