Pregunta

Simplemente entrar en pruebas unitarias con C ++. Parece que necesitaré escribir varias clases de Stub a medida que avanzo. Entiendo que hay una diferencia entre simulacros y trozos. Básicamente, parece que los simulacros son para cuando está probando que algo sucedió en el objeto (por ejemplo, verificar), mientras que los stubs simplemente facilitan su prueba. Supongo que para burlarse, puedo usar Googlemock, pero no veo nada en él para crear trozos (Ala Rhinomocks 'GenerateStub).

¿Hay alguna forma de obtener talentos generados automáticamente? ¿Googlemock tiene algún soporte para Stubs? ¿O tengo que crear manualmente trozos para las pruebas?

¿Fue útil?

Solución

Creo que la pieza que falta del rompecabezas es que no tiene que establecer una expectativa en un método y, en su lugar, puede establecer un valor de retorno predeterminado.

Simulacros

Toda la discusión y ejemplos en el "Google Mock para muñecos"Se centra en la configuración de las expectativas. Todo habla sobre el uso de algún código similar al siguiente:

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

Que es lo que quieres para burlarse, pero para retirarte no tienes ninguna expectativa. Después de leer esa introducción, no tenía idea de cómo usar Googlemock para Stubbing.

Tiradas

El comentario de Ratkok me llevó a averiguar cómo establecer un valor de retorno predeterminado. Aquí le mostramos cómo especificar un valor de retorno para un objeto burlado pero sin expectativas:

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

http://code.google.com/p/googlemock/wiki/cookbook#setting_the_default_actions_for_a_mock_method

Parece que Googlemock emitirá una advertencia si llama a un método que no tiene esperanza_call. Aparentemente, puede evitar esta advertencia utilizando su Nicemock Construya o simplemente puede ignorarlo. Además, parece que puede evitar la advertencia utilizando una esperanza (que no estoy seguro de si es una buena idea para los trozos). Desde el Preguntas frecuentes de Google Mock:

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

Creo que eso es exactamente lo que estaba tratando de resolver.

Actualizar

Puedo confirmar que esto funciona. Escribí una prueba unitaria usando Google Test junto con Googlemock y pude detener un método para una clase usando ON_CALL.

Otros consejos

La única diferencia entre un simulacro y un trozo es que un simulacro aplica el comportamiento, mientras que un trozo no.

Hasta donde sé, los simulacros de Google Mock son en realidad los trozos de forma predeterminada. Solo hacen cumplir el comportamiento si coloca afirmaciones sobre los diversos métodos.

Mira esto: stubgen y la discusión similar aquí.

Esta pregunta Quizás útil/relacionado también.

Con respecto a Google Mocks: lo usamos en mi proyecto actual para automatizar completamente la implementación de Stub. Prácticamente toda la base del código de antaño se implementa utilizando Google Mocks.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top