No está documentado en el sitio web y la gente parece tener problemas para configurar el marco. ¿Alguien puede mostrar una introducción paso a paso para una configuración de proyecto de muestra?
82
No está documentado en el sitio web y la gente parece tener problemas para configurar el marco. ¿Alguien puede mostrar una introducción paso a paso para una configuración de proyecto de muestra?
Respuestas:
Lo que dijo Arlaharen fue básicamente correcto, excepto que omitió la parte que explica los errores del enlazador. En primer lugar, debe crear 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, entonces todos sus usuarios necesitan tener instalada la biblioteca en tiempo de ejecución de Visual C ++, y los que no lo hagan se quejarán de que faltan misteriosas DLL en su sistema ... por los cientos de kilobytes adicionales que cuesta vincular el CRT estáticamente, te ahorras muchos dolores de cabeza más adelante en el 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 destino -> C / C ++ -> Generación de código -> Biblioteca en tiempo de ejecución, y debe configurarse como "Multi-Threaded" para su versión de versión y "Multi-Threaded Debug" para su compilación de depuración.
Dado que la biblioteca gtest se construye de la misma manera, debe asegurarse de que está vinculando con la versión correcta de ella , o de lo contrario el vinculador extraerá otra copia de la biblioteca en tiempo de ejecución, que es el error que vio (por cierto, esto no debería hacer una diferencia si está usando MFC o no). Debe compilar gtest como modo de depuración y lanzamiento y conservar ambas copias. Luego, enlaza con gtest.lib / gtest_main.lib en su versión de lanzamiento y gtestd.lib / gtest_maind.lib en su versión de depuración.
Además, debe asegurarse de que su aplicación apunte al directorio donde se almacenan los archivos de encabezado gtest (en propiedades -> C / C ++ -> General -> Directorios de inclusión adicionales), pero si llegó al error del vinculador, supongo que ya logró corregir esta parte, o de lo contrario tendría que lidiar con muchos más errores del compilador primero.
fuente
(Estas instrucciones hacen que el marco de prueba funcione para la configuración de depuración. Debería ser bastante trivial aplicar el mismo proceso a la configuración de la versión).
Obtenga Google C ++ Testing Framework
C:\gtest
Construya las bibliotecas del marco
C:\gtest\msvc\gtest.sln
en Visual StudioCree y configure su proyecto de prueba
C:\gtest\include
C:\gtest\msvc\gtest\Debug
oC:\gtest\msvc\gtest-md\Debug
, según la ubicación de gtestd.libgtestd.lib
Verificando que todo funcione
main()
función.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 }
Depurar> Iniciar depuración
Si todo funcionó, debería ver aparecer la ventana de la consola y mostrarle los resultados de la prueba unitaria.
fuente
Hice un video tutorial sobre la configuración: http://www.youtube.com/watch?v=mzSzwQOmMRs
fuente
Habiendo construido gtest, esto es lo que he hecho:
Después de eso, simplemente 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(); }
fuente
gtest_main.lib
contiene lamain
función predeterminada , por lo que probablemente no desee incluirla si escribió la suyamain
explícitamente.Si no desea escribir su propio main () para las pruebas, puede usar la función main () definida en gtest_main.lib, pero luego obtiene errores del vinculador "El punto de entrada debe definirse" en VS2012. En su proyecto de prueba, configure 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 haya vinculado en correctamente).
fuente
En Microsoft Visual Studio, el tipo de biblioteca de tiempo de ejecución mal configurado provoca errores de enlace.
VS 2005 (y 2008) utiliza DLL multiproceso o DLL de depuración multiproceso de forma predeterminada. Pero la biblioteca de pruebas de Google usa el tiempo de ejecución de depuración Mulithreaded o Mulithreaded de forma predeterminada.
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 en tiempo de ejecución).
fuente
Muchos errores, tomó un tiempo corregirlos.
A continuación se indican unos sencillos pasos:
# Descargue el archivo ZIP de Googletest desde: https://github.com/google/googletest
# Solución de estudio visual de Googletest
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)
fuente