He desarrollado una pequeña función de ayuda para una clase de prueba de unidad, que toma mi vector<unsigned char>
y la convierte de nuevo a const char *
. Escribí esto para poder pasarlo a la macro ASSERT_STREQ
de gtest para hacer comparaciones simples. Aquí está:C++ función que devuelve const char *
const char * convertVecToChar(std::vector<unsigned char>& source)
{
std::vector<unsigned char>::size_type size = source.size();
char* data = (char*)malloc(sizeof(char) * (size + 1));
memcpy(data, &source[0], size);
data[size] = 0;
return data;
}
Y aquí está un ejemplo de lo que se llama:
ASSERT_STREQ("de", convertVecToChar(somevector));
Supongo que esto es permeable sin embargo, como estoy llamando malloc
, pero sin llamar delete
más por el camino?
¿Hay una forma más elegante de hacerlo, que no implica la creación de una variable const char *
por cada vez que llamo a ASSERT_STREQ
dentro de un método de prueba?
Muchas gracias de antemano por todas las respuestas.
Chris
Use 'libre()' 'después de malloc()', 'no delete'. – hmjd
+1 para una pregunta interesante. Aunque realmente no tengo una respuesta. Esto parece un truco gigante solo para pruebas unitarias. ¿Consideraste crear un 'ASSERT_VECEQ'? Además, tal vez no debería preocuparse demasiado por las pérdidas de memoria en las pruebas unitarias. –
Bien, gracias por avisarme. –