2011-02-07 11 views
7

Estoy intentando que Google se burle de un método virtual que tiene un especificador throw(). La función original es el siguiente:Burlarse de un método con el especificador throw()

virtual ReturnValue FunctionName() const throw(); 

estoy consiguiendo el error del compilador: looser throw specifier for 'virtual FunctionSignature'

Este es el código que he intentado hasta ahora:

MOCK_CONST_METHOD0(FunctionName, ReturnValue()); 
MOCK_CONST_METHOD0(FunctionName, ReturnValue() throw()); 
MOCK_CONST_METHOD0(FunctionName, ReturnValue()) throw(); // Gives a different error entirely. 

He intentado casi todos Se puede pensar en otra combinación, pero estas son las que parecen más lógicas. ¿Cómo hago para que Google se burle de un método con un especificador throw()?

+0

Me parece que Google estilo de codificación prohíbe excepciones por completo. –

+0

@Alexandre C: Supongo que una pregunta es, ¿GoogleMock está diseñado para admitir código no escrito en el estilo de la casa de Google? –

+1

@Steve: mi conjetura es no (t todavía), pero no me gusta adivinar. –

Respuesta

1

Mi solución: crear una implementación de la función virtual que consiste únicamente en pasar a un método simulado.

MOCK_CONST_METHOD0(MockFunctionName, ReturnValue()); 
virtual ReturnValue FunctionName() const throw() 
{ 
    return MockFunctionName(); 
} 

Entonces, cada vez que necesita para escribir un Expect_Call o hacer cualquier cosa por ese método, sólo se refieren a MockFunctionName.

+0

Bien, ahora qué hay de EXPECT_THROW – lolsborn

1

Google mock no es compatible con las especificaciones de excepción. La razón es que piensan que la especificación de la excepción es principalmente un error y debe evitarse en la práctica, incluso si usa excepciones de manera extensiva.

Hay algunas fuentes que apoya este punto de vista:

la solución sería volver a escribir el código como:

virtual ReturnValue FunctionName() const throw(); 

y luego usar:

MOCK_CONST_METHOD0(FunctionName, ReturnValue()); 
Cuestiones relacionadas