2011-05-20 15 views
5

Tengo una sección de código que no me gustaría ejecutar si se está probando la unidad. Esperaba encontrar un indicador #defined establecido por la biblioteca gtest que puedo verificar. No pude encontrar uno que se utiliza para ese fin, pero después de mirar a través de la cabecera GTEST, encontré uno que pensé que podría utilizar la siguiente manera:Cómo comprobar si Google Test se ejecuta en mi código

SomeClass::SomeFunctionImUnitTesting() { 
    // some code here 
    #ifndef GTEST_NAME 
    // some code I don't want to be tested here 
    #endif 
    // more code here 
} 

Esto no parece trabajar como todo el código funciona independientemente. ¿Hay otra bandera que pueda verificar que funcione?

+0

El código que se comporta de forma diferente durante la prueba y la producción generalmente no es una buena idea. Si el código que entrega no es el que aprobó las pruebas, ¿de qué sirven las pruebas? –

Respuesta

5

Google Test no necesita ni proporciona su propio contenedor de compilación. Ni siquiera tiene que volver a compilar los archivos fuente a veces. Puede simplemente vincularlos junto con su código de prueba. Su código de prueba llama a su código de biblioteca ya compilado. Su código de biblioteca probablemente ni siquiera incluye los encabezados Gtest.

Si desea que su código de biblioteca se ejecute de manera diferente bajo prueba, primero debe asegurarse de que su código de biblioteca sea compilado de manera diferente bajo prueba. Necesitarás otro objetivo de compilación. Al compilar para ese objetivo de compilación, puede definir un símbolo que indique a su código que está en modo de prueba. Evitaría el prefijo GTEST para ese símbolo; dejarlo para usar con el código de Google.


Otra forma de conseguir lo que estás buscando es utilizar inyección de dependencias. Mueva su código especial a otra rutina, posiblemente en su propia clase. Pase un puntero a esa función o clase en su función SomeFunctionImUnitTesting y llámelo. Cuando prueba ese código, puede hacer que el arnés de prueba pase una función o clase diferente a ese código, evitando así el código problemático sin tener que compilar el código varias veces.

+0

Gracias, creo que DI es probablemente el mejor enfoque aquí. – MahlerFive

Cuestiones relacionadas