Screenplay: Unittest: GTest and CMake¶
Discussion
How to use external code like googletest?
Copy it into self’s repo
Will remain a copy, nobody will update, bitrot
Git has sub-repositories. Still you have to build it.
Use distro’s package manager
This is what we will do here
Installed it already in Screenplay: Unittest: GTest Basics
Installed: to be found in Standard Paths¶
What happens when I say one of these for example?
#include <gtest/gtest.h>
-lgtest
$ dnf repoquery -l gtest-devel
...
/usr/include/gtest/gtest.h
...
/usr/lib64/libgtest.so
...
$ dpkg --listfiles libgtest-dev
... likewise ...
Discussion
Standard paths
Include path:
/usr/include/
Library path:
/usr/lib64/
CMake: “Find Modules”¶
CMake is a “declarative language” (nah, so to say)
User declares “I insist in gtest being there”
FIND_PACKAGE(GTest REQUIRED)
Usually in toplevel
CMakeLists.txt
… but not necessarily so
# entry point for building C/C++ artifacts. has nothing to do with the
# website build itself; it builds the C/C++ code that is
# referenced/described from in the website.
CMAKE_MINIMUM_REQUIRED(VERSION 3.20)
PROJECT(JoergFaschingbauer)
enable_testing()
#FIND_PACKAGE(GTest REQUIRED)
FIND_PACKAGE(Threads REQUIRED)
SET(CMAKE_CXX_STANDARD 23)
# compiler options. (we only check for gcc)
if (${CMAKE_COMPILER_IS_GNUCC})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -ggdb -Wall -Werror")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -ggdb -Wall -Werror")
endif()
ADD_SUBDIRECTORY(googletest)
ADD_SUBDIRECTORY(googlebenchmark)
ADD_SUBDIRECTORY(trainings/material/soup)
ADD_SUBDIRECTORY(trainings/log/detail/2020-03-30/code)
ADD_SUBDIRECTORY(about/site/work-in-progress/fh-joanneum/2020/code)
ADD_SUBDIRECTORY(about/site/work-in-progress/fh-joanneum/2021)
ADD_SUBDIRECTORY(about/site/work-in-progress/fh-joanneum/dtle/code)
Discussion
Hm. CMake find modules. Hm.
Google is your friend
Better yet: use the source, Luke
Show GTest
find module; point to documentation,
less /usr/share/cmake/Modules/FindGTest.cmake
...
Consequentially, usage:
ADD_EXECUTABLE(assert assert.cc)
TARGET_LINK_LIBRARIES(assert GTest::GTest)
Executing Tests As Part of Build¶
ADD_TEST(assert assert)
1st arg: test name (cmake reports failures as such)
2nd arg: command (from
ADD_EXECUTABLE()
)
Tests That Are Expected to Fail¶
SET_TESTS_PROPERTIES(
assert ... (maybe more)
PROPERTIES WILL_FAIL true)