====== Google C++ Testing Framework ====== Doku: * Google Test: [[https://github.com/google/googletest/blob/master/README.md]] (EN) * Google Mock: [[https://github.com/google/googletest/blob/master/googlemock/README.md]] (EN) * What Is Google C++ Mocking Framework? [[https://github.com/google/googletest/blob/master/googlemock/docs/ForDummies.md]] (EN) Download 1.7.0:\\ [[https://code.google.com/p/googletest/downloads/list]]\\ [[https://code.google.com/p/googletest/downloads/detail?name=gtest-1.7.0.zip&can=2&q=]] ===== Integration in IDE ===== In MS **VisualStudio** integrieren: Auspacken und in **.\gtest-1.7.0\msvc\** die Solution **gtest-md.sln** aufmachen. "The solution file with the -md suffix uses DLL versions of Microsoft runtime libraries," [[http://leefrancis.org/2010/11/17/google-test-gtest-setup-with-microsoft-visual-studio-2008-c/]] Dort das Projekt **gtest-md** anpassen: * Plattform x64 (GT kommt nur mit Win32) * character set = "not set" (Eingestellt ist MBCS) * Übersetzen. * Pfade für lib und include im eigenen Projekt setzen. VS Plugin: [[https://visualstudiogallery.msdn.microsoft.com/9dd47c21-97a6-4369-b326-c562678066f0?SRC=VSIDE]]\\ Damit werden die Tests im **VS Test Explorer** gelistet.\\ Voraussetzung: Der Name der EXE muss mit **%%*Test.exe%%** übereinstimmen (Regex ist %%"[Tt]est[s]{0,1}.exe"%%).\\ [[https://github.com/markusl/GoogleTestRunner/blob/master/GoogleTestRunner/GoogleTestDiscoverer.fs]]\\ Ergo: einfach in den Projektsettings den **TargetName** auf **%%"$(ProjectName).Test"%%** setzen. Separater Testrunner: [[https://github.com/ospector/gtest-gbar]] Doku zu GT: [[https://github.com/google/googletest/blob/master/googletest/docs/Documentation.md]] Tests, die per default NICHT laufen sollen (perftests, etc.) müssen disabled werden, indem **DISABLED_** vor den Namen gehängt wird.\\ [[https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md]] ---- * assert\\ Ersetzt **%%VS::Assert::*%%** und verzweigt wahlweise auf GT und VS. FIXME ===== GT Kompilieren ===== Vor dem Kompilieren sollte man das File **./gtest-1.7.0/include/gtest/internal/gtest-port.h** anschauen.\\ Dort am Anfang sind mehrere Makros beschrieben, die das Kompilieren beeinflussen (z.B. "GTEST_HAS_PTHREAD", "GTEST_LINKED_AS_SHARED_LIBRARY", "GTEST_CREATE_SHARED_LIBRARY", "GTEST_OS_AIX", "GTEST_OS_SOLARIS", etc.). Ich habe GT wie folgt kompiliert: ==== AIX ==== Im Ordner "username@aix:/users/username/ProduktName/ProduktRelease/Code/external/gtest/gtest-1.7.0/gcc-AIX": # Pfade zu den GCC-Libraries: GCC_IncludePath=/usr/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.8.1/include-fixed:/usr/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.8.1/include:/usr/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.8.1/include/c++/powerpc-ibm-aix6.1.0.0/pthread/ppc64:/usr/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.8.1/include/c++ # Pfade zu den AIX-Libraries: SYS_IncludePath=/usr/include:/usr/include/sys export INCLUDE=${GCC_IncludePath}:${SYS_IncludePath} export CPLUS_INCLUDE_PATH=${INCLUDE} export C_INCLUDE_PATH=${INCLUDE} export GTEST_DIR=.. # Kompilieren: # Mit dem Parameter "-isystem" (so steht es in der Doku) hat es nicht funktioniert, # stattdessen mit "-I${GTEST_DIR}/include" g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -pthread -D_AIX -DGTEST_HAS_PTHREAD=1 -mcpu=powerpc64 -maix64 -c -x c++ -std=c++11 -g -ggdb -w -fpermissive -fexceptions -fno-diagnostics-show-option -O0 -fPIC ${GTEST_DIR}/src/gtest-all.cc # Kontrolle: nm -g -X64 gtest-all.o | more # (Statische) Library bauen: ar -rv -X64 libgtest.a gtest-all.o # Kontrolle: nm -g -X64 libgtest.a | more Für **[[EDV:OS:UNIX:Derivate:AIX]]**: * A quick introduction to the Google C++ Testing Framework: [[http://www.ibm.com/developerworks/aix/library/au-googletestingframework.html]] ==== RHEL ==== Im Ordner "username@rhel:/users/username/ProduktName/ProduktRelease/Code/external/gtest/gtest-1.7.0/gcc-RHEL": # Pfade zu den GCC-Libraries: GCC_IncludePath=/opt/rh/devtoolset-3/root/usr/include/c++/4.9.2 # Pfade zu den AIX-Libraries: SYS_IncludePath=/usr/include:/usr/include/sys export INCLUDE=${GCC_IncludePath}:${SYS_IncludePath} export CPLUS_INCLUDE_PATH=${INCLUDE} export C_INCLUDE_PATH=${INCLUDE} export GTEST_DIR=.. # Kompilieren: g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -pthread -m64 -c -x c++ -std=c++11 -g -ggdb -w -fpermissive -fexceptions -fno-diagnostics-show-option -O0 -fPIC ${GTEST_DIR}/src/gtest-all.cc # Kontrolle: nm -g gtest-all.o | less # (Statische) Library bauen: ar -rv libgtest.a gtest-all.o # Kontrolle: nm -g libgtest.a | less ---- Stand: 08.11.2016 EOF