c++ visual-studio unit-testing visual-studio-2005 googletest

Cómo configurar el marco de prueba de Google C++(gtest) en Visual Studio 2005



visual-studio unit-testing (7)

No está documentado en el sitio web y las personas parecen tener problemas para configurar el marco. ¿Puede alguien mostrar la introducción paso a paso a la configuración de un proyecto de muestra?


(Estas instrucciones hacen que el marco de prueba funcione para la configuración de depuración. Debe ser bastante trivial aplicar el mismo proceso a la configuración de la versión).

Obtenga el marco de prueba de Google C ++

  1. Descargue el último marco de prueba
  2. Descomprimir a C:/gtest

Construya las Bibliotecas del Marco

  1. Abra C:/gtest/msvc/gtest.sln en Visual Studio
  2. Establezca la configuración en "Depurar"
  3. Construir solución

Crea y configura tu proyecto de prueba

  1. Cree una nueva solución y elija la plantilla Aplicación de consola de Visual C ++> Win32> Win32
  2. Haga clic derecho en el proyecto recién creado y elija Propiedades
  3. Cambiar la configuración a depurar
  4. Propiedades de configuración> C / C ++> General> Directorios de inclusión adicionales: Agregar C:/gtest/include
  5. Propiedades de configuración> C / C ++> Generación de código> Biblioteca de tiempo de ejecución: si su código se vincula a una DLL de tiempo de ejecución, elija DLL de depuración de subprocesos múltiples (/ MDd). De lo contrario, elija Depuración multiproceso (/ MTd).
  6. Propiedades de configuración> Enlazador> General> Directorios de biblioteca adicionales: agregue C:/gtest/msvc/gtest/Debug o C:/gtest/msvc/gtest-md/Debug , dependiendo de la ubicación de gtestd.lib
  7. Propiedades de configuración> Enlazador> Entrada> Dependencias Adicionales: Agregue gtestd.lib

Verificando que todo funcione

  1. Abra el cpp en su Proyecto de Prueba que contiene la función main() .
  2. Pega el siguiente código:

    #include "stdafx.h" #include <iostream> #include "gtest/gtest.h" TEST(sample_test_case, sample_test) { EXPECT_EQ(1, 1); } int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); RUN_ALL_TESTS(); std::getchar(); // keep console window open until Return keystroke }

  3. Depurar> Iniciar depuración

Si todo funcionó, debería ver aparecer la ventana de la consola y mostrarle los resultados de la prueba unitaria.


Después de haber construido gtest, esto es lo que he hecho:

  1. Agregue / mypath / gtest-1.0.1 / Debug (o Release) a Common Properties-> Linker-> General-> Additional Library Directories
  2. Agregue gtest.lib y gtest_main.lib a Common Properties-> Linker-> Input-> Additional Dependencies

Después de eso, solo escribo mis pruebas usando TEST o TEST_F según corresponda y las compilo junto con mi función principal:

int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }


En Microsoft Visual Studio, el tipo de biblioteca de tiempo de ejecución mal configurado causa errores de enlace.

VS 2005 (y 2008) utiliza DLL multiproceso o DLL de depuración multiproceso como valor predeterminado. Pero la biblioteca de prueba de Google usa Multhreaded o Multhreaded runtime como valor predeterminado.

Por lo tanto, elija el tipo de biblioteca de tiempo de ejecución apropiado para la biblioteca de prueba de google. (en Propiedades de configuración -> Generación de código -> Biblioteca de tiempo de ejecución).



Lo que Arlaharen dijo fue básicamente correcto, excepto que omitió la parte que explica los errores del enlazador. En primer lugar, debe compilar su aplicación sin el CRT como biblioteca de tiempo de ejecución. Siempre debe hacer esto de todos modos, ya que realmente simplifica la distribución de su aplicación. Si no hace esto, todos sus usuarios necesitarán la Biblioteca de tiempo de ejecución de Visual C ++ instalada, y aquellos que no lo harán se quejarán de la falta de DLL misteriosa en su sistema ... por los pocos cientos de kilobytes adicionales que cuesta vincular en el CRT estáticamente, te ahorras muchos dolores de cabeza más adelante en tu apoyo (confía en mí en este caso, ¡lo he aprendido de la manera difícil!).

De todos modos, para hacer esto, vaya a las propiedades del objetivo -> C / C ++ -> Generación de código -> Biblioteca de tiempo de ejecución, y debe establecerse como "Multi-Threaded" para su compilación de versión y "Depuración Multi-Threaded" para tu compilación Debug

Dado que la biblioteca gtest está construida de la misma manera, debe asegurarse de que está enlazando con la versión correcta de la misma , de lo contrario el enlazador obtendrá otra copia de la biblioteca en tiempo de ejecución, que es el error que vio (por cierto, esto no debería marcar la diferencia si está usando MFC o no). Necesita crear gtest como modo de Depuración y Liberación y conservar ambas copias. A continuación, establece un enlace contra gtest.lib / gtest_main.lib en su compilación Release y gtestd.lib / gtest_maind.lib en su compilación Debug.

Además, debe asegurarse de que su aplicación apunte al directorio donde están almacenados los archivos del encabezado gtest (en propiedades -> C / C ++ -> General -> Directorios de inclusión adicionales), pero si llegó al error del enlazador, supongo que ya logró corregir esta parte, o tendría que lidiar con muchos más errores de compilación primero.


Muchos errores, tomó un tiempo para arreglarlo.

Aquí hay pasos simples:

# Descargue el archivo ZIP de Googletest desde: https://github.com/google/googletest

# Googletest Visual Studio Solution

Open C:/googletest/googletest/msvc/2010/gtest.sln Change "Solution configuration" from "Debug" to "Release" Build Solution creates gtest.lib

# Tu proyecto:

Project Properties > Configuration Properties > VC++ Directories > Include Directories append the following: ;C:/googletest/googletest/include Project Properties > Configuration Properties > Linker > General > Additional Library Directories > append the following: ;C:/googletest/googletest/msvc/2010/gtest/Win32-Release Project Properties > Configuration Properties > C/C++ > Runtime Library Remove the value of the above. (or match it to Googletest project)


Si no desea escribir sus propias pruebas main () para las pruebas, puede usar la función main () definida en gtest_main.lib pero luego obtendrá los errores del enlazador "El punto de entrada debe estar definido" en VS2012. En su proyecto de prueba, establezca ProjectProperties-> Linker-> System-> SubSystem en "Console", ya que esto obligará a VS2012 a buscar un punto de entrada llamado "main ()" y lo encontrará en gtest_main.lib (siempre que esté vinculado) en apropiadamente).