2010-09-13 8 views
20

vi la documentación de esa característica se parece bastante importante ya que está en funciones Descripción general de la prueba Google y detallados en:
https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md#death-tests¿Cuáles son Google prueba, Muerte Pruebas de

Se ven como norma assert() pero son parte de Google Test, entonces un marco de prueba de xUnit. Por lo tanto, me pregunto cuál es el uso real o ventaja de usar esas pruebas de muerte son.

Respuesta

16

La afirmación está allí para confirmar que una función provocaría la terminación del programa si se ejecutara en el proceso actual (los detalles explican que la prueba de muerte se invoca desde un subproceso que permite que las pruebas continúen a pesar del fallecimiento). Esto es útil porque algunos códigos pueden garantizar la terminación del programa/aborto en caso de falla (por ejemplo, si hubo un error irrecuperable), y las pruebas unitarias deben confirmar que una función se adhiere a su comportamiento documentado, independientemente de lo que pueda ser.

La descripción en la página wiki realmente lo explica mejor:

En muchas aplicaciones, hay afirmaciones que pueden causar fallos en la aplicación si no se cumple la condición. Estas comprobaciones de cordura, que aseguran que el programa se encuentra en buen estado, fallarán en el momento más temprano posible después de que se haya dañado algún estado del programa. Si la afirmación comprueba el estado incorrecto, entonces el programa puede proceder en un estado erróneo, lo que podría conducir a daños en la memoria, agujeros de seguridad o algo peor. Por lo tanto, es de vital importancia comprobar que dichas afirmaciones funcionan como se espera.

+0

La parte que me preocupa es la ganancia de usar Google Death Tests en 'ASSERT()' o 'assert()'. – Wernight

+3

@Wernight: si usa 'assert' y falla, el proceso se detiene y, por lo tanto, la prueba de la unidad se detiene, no se generan informes, etc. Al iniciar la prueba en otro proceso, es posible controlar que se detuvo como se esperaba. informe si no lo hizo, etc ... –

+0

@Matthieu: Reemplazando en la aplicación 'assert()' tradicional por 'ASSERT_EXIT()' de Google Test, la versión funcionará igual, pero durante la ejecución de la prueba las aserciones se pueden verificar correctamente . – Wernight

1

pensé que la introducción en su enlace explica bastante bien:

En muchas aplicaciones, hay afirmaciones que pueden causar fallos en la aplicación si no se cumple una condición. Estas comprobaciones de cordura, que aseguran que el programa se encuentra en buen estado, fallarán en el momento más temprano posible después de que se haya dañado algún estado del programa. Si la afirmación comprueba el estado incorrecto, entonces el programa puede proceder en un estado erróneo, lo que podría conducir a daños en la memoria, agujeros de seguridad o algo peor. Por lo tanto, es de vital importancia comprobar que dichas afirmaciones funcionan como se espera.

Dado que estas verificaciones previas provocan que los procesos mueran, llamamos a dichas pruebas pruebas de muerte. De manera más general, cualquier prueba que verifique que un programa termina de una manera esperada también es una prueba de muerte.

¿Qué parte de eso no tiene sentido?

+0

Probablemente me perdí esa parte. Entonces, el 'ASSERT()' tradicional es una prueba de muerte. – Wernight

+3

@Wernight: no, ASSERT_DEATH es una prueba de muerte. Un 'assert' tradicional es el comportamiento del programa para el cual le gustaría escribir un test de defunción, para demostrar que el proceso en el cual ocurre el 'assert' muere como se esperaba. –

Cuestiones relacionadas