test google c++ googletest googlemock

c++ - google test install



¿Cuál es la diferencia entre gtest y gmock? (3)

"Google Mock no es un marco de prueba en sí mismo. En su lugar, necesita un marco de prueba para escribir pruebas. Google Mock funciona perfectamente con Google Test. Viene con una copia de Google Test incluido. A partir de la versión 1.1.0, también puede usar con cualquier marco de prueba de C ++ de su elección. "- Google Mock, Requisitos del sistema

Los simulacros son como objetos, definidos de tal manera que imitan el trato real al proporcionar un comportamiento controlado. Por ejemplo, para probar una aplicación de cotización de acciones, crearía un proveedor de datos de acciones falsos que creó cotizaciones de acciones falsas para probar su código. Piense en la palabra simulacro, literalmente significa "imitar".

Estoy tratando de entender el propósito de google-mock , el marco de burla de C ++ de Google .

Ya he trabajado con gtest anteriormente, pero aún no puedo entender qué es gmock . ¿Por qué lo necesitamos?

gtest se utiliza para la prueba de la unidad. ¿Para qué necesitamos gmock , si se requiere gmock para las unit testing ?


Las unidades de software no viven en prados verdes. Muy a menudo necesitan algunas contrapartes para hacer el trabajo. En el sistema real, estas contrapartes pertenecen al propio sistema. En las pruebas unitarias se sustituyen por mocks.

Gtest es un marco para pruebas de unidad. Gmock es un marco que imita el resto de su sistema durante las pruebas unitarias.


Suponga que está escribiendo un fragmento de código que necesita interactuar con un sistema externo impredecible y costoso (por ejemplo, un sitio web, una gran base de datos, un sensor físico, etc.) Su código debe seguir funcionando cuando el sistema externo se apaga , o le da mensajes de error, o le da datos inconsistentes. ¿Cómo puede probar si su código realmente cumple con esos requisitos?

Bien, puede ejecutarlo contra un sitio web / base de datos / sensor / lo que sea, un montón de veces, y espero que tenga suerte en todas las condiciones de error que su código debe manejar. Obviamente, una estrategia de prueba bastante cara y poco fiable.

Entonces, en lugar de eso, escribe algo que satisfaga la misma interfaz que el sitio web / base de datos / sensor / lo que sea, pero que haya programado para producir ciertas respuestas "enlatadas" (errores, tiempos de espera, datos inconsistentes, etc.) Sus pruebas ahora corre mucho más rápido (porque no enfrentan la sobrecarga de un sitio web real / base de datos / sensor / lo que sea), y son predecibles. Desafortunadamente, se necesita mucha codificación para escribir un sitio web / base de datos / sensor "simulacro" independiente para cada escenario que necesite probar. Cuanto más trabajo es, menos probable es que lo hagas. Resultado: código inadecuado probado.

Gmock y sus parientes automatizan muchas de estas cosas, por lo que puede especificar el comportamiento deseado de "enlatado" en medio de la prueba en sí, al costo de solo unas pocas líneas de código. Si las pruebas son fáciles de escribir, es probable que escriba más de ellas y, por lo tanto, es más probable que descubra errores antes de enviar el código :-)

Por cierto, esto implica que también necesita una "inyección de dependencia": su código debe tomar un parámetro del tipo de interfaz, y debe poder pasar un objeto simulado (para prueba de unidad) o el "real" Sitio web / base de datos / sensor / lo que sea (para uso en el mundo real).