2011-06-14 26 views
8

Acaba de entrar en la Unidad de pruebas con C++. Parece que tendré que escribir varias clases de stub a medida que avanzo. Según entiendo, existe una diferencia entre Mocks y Stubs. Básicamente, parece que los Mocks son para cuando pruebas algo sucedido en el objeto (por ejemplo, para verificar) mientras que los Stubs simplemente facilitan tu prueba. Supongo que para burlarse, puedo usar googlemock pero no veo nada para crear Stubs (en el caso de RhinoMocks 'GenerateStub).C++ Pruebas unitarias: ¿Trozos (no se burla)?

¿Hay una manera de conseguir los trozos generados de forma automática? ¿Googlemock tiene algún soporte para stubs? ¿O tengo que crear manualmente stubs para probar?

+0

No estoy seguro, pero he oído que boost tiene una biblioteca de pruebas unitaria. Desafortunadamente, tengo que admitir que nunca he escrito código para pruebas unitarias. – AJG85

+0

¿No hay algún tipo de secuencia de comandos python de generador que pueda generar algunas clases simuladas? – Nim

+1

@aloneguid: ¿En serio? No lo creo Las personas reales de C++ usan cualquier prueba que sea apropiada para su aplicación. –

Respuesta

16

creo que la pieza faltante del rompecabezas es que usted no tiene que establecer una expectativa en un método y en su lugar sólo se puede establecer un valor de retorno por defecto.

Mocks

Toda la discusión y ejemplos en el "Google Mock for Dummies" se centra en el establecimiento de expectativas. Todo habla sobre el uso de un código similar al siguiente:

EXPECT_CALL(turtle, PenDown()) 
     .Times(AtLeast(1)); 

¿Qué es lo que quiere para burlarse, pero para stubbing usted no tiene ninguna expectativa. Después de leer esa introducción, no tenía ni idea de cómo usar googlemock para copiar.

Talones

comentario de ratkok me llevaron a encontrar la manera de establecer un valor de retorno por defecto. Así es como para especificar un valor de retorno para un objeto burlado, pero ninguna expectativa:

ON_CALL(foo, Sign(_)) 
     .WillByDefault(Return(-1)); 

http://code.google.com/p/googlemock/wiki/CookBook#Setting_the_Default_Actions_for_a_Mock_Method

Parece googlemock emitirá un aviso si se llama a un método que no tiene EXPECT_CALL. Aparentemente puede evitar esta advertencia utilizando su construcción NiceMock o simplemente puede ignorarla. Además, parece que puede evitar la advertencia mediante el uso de un esperar (que no estoy seguro si es una buena idea para los talones). Desde el Google Mock FAQ:

EXPECT_CALL(foo, Bar(_)) 
    .WillRepeatedly(...); 

Creo que es exactamente lo que estaba tratando de averiguar.

actualización

puedo confirmar esto funciona. Escribí una prueba unitaria usando la prueba de google junto con googlemock y pude anular un método para una clase usando ON_CALL.

+0

Sí, usando ON_CALL() y NiceMock es exactamente a lo que me refería también. Verifique esas páginas de la wiki (simulacro de google): este marco burlón es realmente bastante poderoso y flexible. – ratkok

3

La única diferencia entre una maqueta y un intermediario es que hace cumplir una maqueta comportamiento, mientras que un código auxiliar no lo hace.

Por lo que yo sé, se burla de Google Mock son en realidad muñones de forma predeterminada. Solo hacen cumplir el comportamiento si coloca afirmaciones sobre los diversos métodos.

+0

Supongo que lo que estoy confundido es que quiero definir un comportamiento de código auxiliar. Por ejemplo, un método IsValidUser() que devolverá verdadero. No quiero crear una expecation en IsValidUser porque quiero probar algo más y IsValidUser es simplemente una dependencia para probar otro método. Pero todo en googlemocks parece orientarse en torno a la creación de una expectativa – User

+1

Puede evitar establecer expectativas en google mock al proporcionar valores/comportamiento predeterminados. Además, google mock framework le permite ignorar las llamadas inesperadas para que sus pruebas no fallen si la expectativa no existe. – ratkok

0

Tome un vistazo a esto: stubgen y la discusión similar here.

This question que puede resultar útil/relacionados también.

En cuanto a Google burla - que utilizamos en mi proyecto actual para automatizar completamente la aplicación trozo. Virtualmente, la base de código de código completo se implementa con Google Mocks.

Cuestiones relacionadas