====== 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