2012-02-13 25 views
12

Estoy usando gmock para pruebas de unidad código C++. No estoy usando gtest framework. Estoy usando el marco de prueba integrado de visual studio 2008.Generación automática de clases simuladas para gmock

Ahora mi problema es que tengo que escribir manualmente clases simuladas para una prueba real de clase a unidad. Por ejemplo, si tengo una clase A con 5 funciones, entonces tengo que escribir MockAClass con 5 funciones. ¿Hay alguna forma de que estas clases se generen automáticamente?

class AClass 
{ 
public: 
    virtual int AFunction() 
    { 
     return 5; 
    } 
    virtual int AFunctionWithArguments(int x) 
    { 
     return x; 
    } 



class MockAClass : public AClass 
{ 
public: 
    MOCK_METHOD0(AFucntion, int()); 
    MOCK_METHOD1(AFunctionWithArgument, int(int x)); 
}; 

Respuesta

18

hay una herramienta incluida con el proyecto simulacro de Google que le ayudará a hacer esto. Sin embargo, creo que la herramienta requiere que se instale Python, y no sé qué tan bien funciona en un entorno de Windows. También descubrí que los archivos generados a veces necesitan un pequeño ajuste para funcionar perfectamente.

Aquí está la información de la docs:

Consejo: Si aun esto es demasiado trabajo para usted, usted encontrará la herramienta gmock_gen.py en Google Mock de guiones/generador/directorio (cortesía del proyecto cppclean) útil. Esta herramienta de línea de comandos requiere que tenga instalado Python 2.4. Usted le da un archivo de C++ y el nombre de una clase abstracta definida en él, e imprimirá la definición de la clase simulada para usted. Debido a la complejidad del lenguaje C++ , este script puede no funcionar siempre, pero puede ser bastante útil cuando lo hace. Para más detalles, lea la documentación del usuario.

Aquí está new localization of this script.

+0

gracias, intento usar esto y espero que funcione, –

+0

está funcionando. Gracias. –

+1

Esto definitivamente funciona en Windows. Estoy en Python 2.7 y está bien. Las advertencias habituales se aplican a los ajustes de mano ... – rholmes

2

Negación: solía trabajo en Typemock

Ha considerado el uso otra herramienta?
Typemock tiene una herramienta llamada Isolator++ que no necesita que escriba "clases burlonas".

TEST_F(IsolatorTests, SomeTest) 
{ 
     AClass* fakeclass = FAKE(AClass); 
     WHEN_CALLED(fakeclass->AFunction()).Return(10); 

     ASSERT_EQ(10, fakeclass.AFunction()); 
} 

Usted puede aprender más sobre él en este about page

+0

He leído acerca de isolator ++. pero eso no es gratis. tienes que obtener una licencia para eso. –

+1

Sí - lamentablemente quieren dinero para su arduo trabajo;) –

+3

@DrorHelper Probablemente vale la pena una exención de responsabilidad de que solía trabajar para Typemock. (No es que eso lo convierta en un mal producto, etc., pero es bueno revelar esas posibles fuentes de sesgo). –

Cuestiones relacionadas