2010-08-06 8 views
13

Estoy tratando de burlarme de un método con plantilla.¿Cómo burlarse de los métodos con plantillas usando Google Mock?

Aquí está la clase que contiene el método para burlarse:

class myClass 
{ 
public: 
    virtual ~myClass() {} 

    template<typename T> 
    void myMethod(T param); 
} 

Como puedo burlar el método myMethod usando Google Mock?

+6

Siento ser inútil, pero yo soy el único que, cuando ve a preguntas como esta, tiene el primer instinto de responder "Eres una plantilla estúpida! Y su madre vestida que divertido! Que podría utilizar una estúpida estúpida plantilla? " –

+1

Gracias por su comentario Brian ... El código fuente que ve es parte de una clase más grande. Esta plantilla no es tan estúpida como parece ... –

+4

http://www.merriam-webster.com/dictionary/mock: para tratar con desprecio o ridículo –

Respuesta

7

En la versión anterior de Google Mock, solo puede simular funciones virtuales; consulte el documentation en la página del proyecto.

Versiones más recientes permitidas para simular non-virtual methods, usando lo que ellos llaman inyección de dependencia de alto rendimiento.

Como congusbongus estados:

Google Mock se basa en la adición de variables miembro para apoyar el método de burla, y puesto que no se puede crear variables miembro plantilla, que es imposible funciones de plantilla simulacros

Un Una solución, por Michael Harrington en el enlace de los grupos de google a partir de los comentarios, es hacer que los métodos de plantilla especializados que llaman a una función normal que se puede burlar. No resuelve el caso general, pero funcionará para las pruebas.

struct Foo 
{ 
    MOCK_METHOD1(GetValueString, void(std::string& value)); 

    template <typename ValueType> 
    void GetValue(ValueType& value); 

    template <> 
    void GetValue(std::string& value) { 
     GetValueString(value); 
    } 
}; 
+1

Sí, tienes razón Ismael, para obtener más información, encontré este enlace: http://groups.google.com/group/googlemock/browse_thread/thread/e52b27b7d9b20145 Por lo tanto, hay una solución para simular métodos con plantillas. –

+1

Para profundizar en esto, Google Mock se basa en agregar variables de miembro para admitir la burla de método, y como no puede crear variables de miembro de plantilla, es imposible simular funciones de plantilla. – congusbongus

Cuestiones relacionadas