sé que CPPUnit hace que sea posible poner a prueba a través de una excepción:CPPUnit implementa una prueba para una excepción
CPPUNIT_ASSERT_THROW(expression, ExceptionType);
¿Alguien puede explicar cómo se implementa CPPUNIT_ASSERT_THROW()
?
sé que CPPUnit hace que sea posible poner a prueba a través de una excepción:CPPUnit implementa una prueba para una excepción
CPPUNIT_ASSERT_THROW(expression, ExceptionType);
¿Alguien puede explicar cómo se implementa CPPUNIT_ASSERT_THROW()
?
Editar: He votado por respuesta de Michael Anderson, ya que es más específico sobre el código exacto de CppUnit, mientras que el mío es una respuesta más general.
En pseudocódigo, va a ser algo como esto:
try
{
// Test code that should throw
}
catch(ExceptionType e)
{
// Correct exception - handle test success
return;
}
catch(...)
{
// Wrong exception, handle test failure.
return;
}
// No exception, handle test failure.
return;
Notificación de fallos de las pruebas en CPPUnit se realiza mediante el lanzamiento de un tipo de excepción personalizada. Llamaremos a eso CppUnitException
aquí por simplicidad.
CPPUNIT_ASSERT_THROW
es una macro que se expandirá a algo que es esencialmente la siguiente:
try
{
expression;
throw CppUnitException("Expected expression to throw");
}
catch(const ExceptionType & e)
{
}
Si expression
tiros (como es de esperar que a), se cae en el bloque catch
que no hace nada.
Si hace expression
no tiro, la ejecución continúa en la línea de código que lanza CppUnitException
, que dará lugar a una falla de la prueba.
Por supuesto, la implementación de la macro CPPUNIT_ASSERT_THROW
es en realidad un poco más lujosa, por lo que también se informa la información de línea y archivo, pero esa es la esencia general de cómo funciona.