#c #unit-testing #cmake #googletest #msys2
Вопрос:
Я попытался внедрить GTest в свой текущий проект. Я установил GTest через msys2 (windows) в режиме mingw64.
поэтому я создал это CmakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(TileGameStudio_Editor LANGUAGES CXX)
set(EDITOR_PROJECT ${PROJECT_NAME})
project(Tester LANGUAGES CXX)
set(TEST_PROJECT ${PROJECT_NAME})
#=============================================================== Setup CMake
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#=============================================================== Setup Paths
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(PROJ_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src)
set(PROJ_INC ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(PROJ_UI ${CMAKE_CURRENT_SOURCE_DIR}/ui)
set(PROJ_LIBS ${CMAKE_CURRENT_SOURCE_DIR}/libs)
set(PROJ_TESTS ${CMAKE_CURRENT_SOURCE_DIR}/tests)
list(APPEND CMAKE_AUTOUIC_SEARCH_PATHS ${PROJ_UI})
#=============================================================== Include Packages
find_package(QT NAMES Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Gui REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS OpenGL REQUIRED)
set(ANGLE_INCLUDE_PATH "D:/Angle/angle/include")
set(ANGLE_LIBRARY_PATH "${PROJECT_SOURCE_DIR}/libs")
INCLUDE(FindPkgConfig)
find_package(Freetype REQUIRED)
find_package(LuaJIT REQUIRED)
find_package(PNG REQUIRED)
find_package(FLAC REQUIRED)
find_package(OGG REQUIRED)
find_package(THEORA REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(Boost COMPONENTS system filesystem json REQUIRED)
find_package(GTest REQUIRED)
find_library(GTest gtest)
#=============================================================== OUTPUT <LIB>_FOUND
if(NOT GTEST_FOUND)
message(STATUS "GoogleTest: NO")
else()
message(STATUS "GoogleTest: YES - under: ${GTEST_INCLUDE_DIRS}n at Root: ${GTEST_ROOT}")
endif()
if(NOT FREETYPE_FOUND)
message(STATUS "freetype2: NO")
else()
message(STATUS "freetype2: YES - under: ${FREETYPE_INCLUDE_DIR_ft2build}")
endif()
if(NOT LUAJIT_FOUND)
message(STATUS "LuaJit: NO")
else()
message(STATUS "LuaJit: YES - under: ${LUA_INCLUDE_DIR}")
endif()
if(NOT PNG_FOUND)
message(STATUS "libPNG: NO")
else()
message(STATUS "libPNG: YES - under: ${PNG_INCLUDE_DIR}")
endif()
if(NOT FLAC_FOUND)
message(STATUS "FLAC: NO")
else()
message(STATUS "FLAC: YES - under: ${FLAC_INCLUDE_DIR}")
endif()
if(NOT OGG_FOUND)
message(STATUS "OGG: NO")
else()
message(STATUS "OGG: YES - under: ${OGG_INCLUDE_DIR}")
endif()
if(NOT THEORA_FOUND)
message(STATUS "THEORA: NO")
else()
message(STATUS "THEORA: YES - under: ${THEORA_INCLUDE_DIR}")
endif()
if(NOT OPENSSL_FOUND)
message(STATUS "OpenSSL: NO")
else()
message(STATUS "OpenSSL: YES - under: ${OPENSSL_INCLUDE_DIR}")
endif()
#=============================================================== Include Directories
include_directories(
${PROJ_LIBS}
${PROJ_INC}
${PROJ_SRC}
${PROJ_UI}
${OPENGL_INCLUDE_DIR}
${FREETYPE_INCLUDE_DIR_ft2build}
${LUA_INCLUDE_DIR}
${ANGLE_INCLUDE_PATH}
${ANGLE_LIBRARY_PATH}
${PNG_INCLUDE_DIR}
${FLAC_INCLUDE_DIR}
${OGG_INCLUDE_DIR}
${THEORA_INCLUDE_DIR}
${OPENSSL_INCLUDE_DIR}
${Boost_INCLUDE_DIRS}
${GTEST_INCLUDE_DIRS}
)
link_directories (
${PROJ_LIBS}
${PROJ_INC}
${PROJ_SRC}
${PROJ_UI}
${OPENGL_LIBRARY_DIRS}
${FREETYPE_INCLUDE_DIR_ft2build}
${LUA_INCLUDE_DIR}
${ANGLE_INCLUDE_PATH}
${ANGLE_LIBRARY_PATH}
${PNG_INCLUDE_DIR}
${FLAC_INCLUDE_DIR}
${OGG_INCLUDE_DIR}
${THEORA_INCLUDE_DIR}
${OPENSSL_INCLUDE_DIR}
${Boost_LIBRARY_DIRS}
${GTEST_INCLUDE_DIRS}
)
#=============================================================== Find GLES Libraries
find_library(GLES2_Lib NAMES d3dcompiler_47 REQUIRED)
find_library(D3D_Lib NAMES libGLESv2 REQUIRED)
#find_library(EGL_Lib NAMES libEGL EGL libegl REQUIRED)
#=============================================================== Collect Sources, Hearders and UI
file(GLOB PROJECT_SOURCES CONFIGURE_DEPENDS
${PROJ_SRC}/*.cpp
)
file(GLOB PROJECT_HEADERS CONFIGURE_DEPENDS
${PROJ_INC}/*.h
)
file(GLOB PROJECT_TESTS CONFIGURE_DEPENDS
${PROJ_TESTS}/*.cpp
)
file(GLOB PROJECT_UI CONFIGURE_DEPENDS
${PROJ_UI}/*.ui
)
file(GLOB PROJECT_RES CONFIGURE_DEPENDS
${PROJ_SRC}/*.qrc
)
#=============================================================== Build App
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(${EDITOR_PROJECT}
${PROJECT_SOURCES}
${PROJECT_HEADERS}
${PROJECT_UI}
${PROJECT_RES}
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
)
else()
if(ANDROID)
add_library(${EDITOR_PROJECT} SHARED
${PROJECT_SOURCES}
${PROJECT_HEADERS}
${PROJECT_UI}
${PROJECT_RES}
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
)
else()
add_executable(${EDITOR_PROJECT}
${PROJECT_SOURCES}
${PROJECT_HEADERS}
${PROJECT_UI}
${PROJECT_RES}
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
)
endif()
endif()
add_executable(${TEST_PROJECT}
${PROJECT_SOURCES}
${PROJECT_HEADERS}
${PROJECT_TESTS}
)
enable_testing()
#=============================================================== Link Libraries
target_link_libraries(${EDITOR_PROJECT}
PRIVATE Qt${QT_VERSION_MAJOR}::Core
PRIVATE Qt${QT_VERSION_MAJOR}::Widgets
PRIVATE Qt${QT_VERSION_MAJOR}::Gui
PRIVATE Qt${QT_VERSION_MAJOR}::OpenGL
${OPENGL_gl_LIBRARY}
${FREETYPE_LIBRARIES}
${LUA_LIBRARY}
${GLES2_Lib}
${D3D_Lib}
#${EGL_Lib}
${PNG_LIBRARY}
${FLAC_LIBRARY}
${OGG_LIBRARY}
${THEORA_LIBRARY}
${OPENSSL_CRYPTO_LIBRARY}
${OPENSSL_SSL_LIBRARY}
${OPENSSL_LIBRARIES}
${Boost_LIBRARIES}
${Boost_SYSTEM_LIBRARY}
${Boost_FILESYSTEM_LIBRARY}
)
target_link_libraries(${TEST_PROJECT}
PRIVATE Qt${QT_VERSION_MAJOR}::Core
PRIVATE Qt${QT_VERSION_MAJOR}::Widgets
PRIVATE Qt${QT_VERSION_MAJOR}::Gui
PRIVATE Qt${QT_VERSION_MAJOR}::OpenGL
${OPENGL_gl_LIBRARY}
${FREETYPE_LIBRARIES}
${LUA_LIBRARY}
${GLES2_Lib}
${D3D_Lib}
#${EGL_Lib}
${PNG_LIBRARY}
${FLAC_LIBRARY}
${OGG_LIBRARY}
${THEORA_LIBRARY}
${OPENSSL_CRYPTO_LIBRARY}
${OPENSSL_SSL_LIBRARY}
${OPENSSL_LIBRARIES}
${Boost_LIBRARIES}
${Boost_SYSTEM_LIBRARY}
${Boost_FILESYSTEM_LIBRARY}
${GTEST_BOTH_LIBRARIES}
)
#=============================================================== Add GoogleTests
message("")
message("Adding Tests to ${TEST_PROJECT}")
message("")
gtest_add_tests(TARGET ${TEST_PROJECT} TEST_LIST outVar)
message("Tests were added to ${TEST_PROJECT}. The List:")
foreach(X ${outVar})
message("- ${X}")
endforeach()
message("")
Выходные данные конфигурации Cmake являются:
GTest Libs are: GTest::gtest;GTest::gtest_main
-- GoogleTest: YES - under:
at Root:
-- freetype2: YES - under: C:/msys64/mingw64/include/freetype2
-- LuaJit: YES - under: C:/msys64/mingw64/include/luajit-2.1
-- libPNG: YES - under: C:/msys64/mingw64/include;C:/msys64/mingw64/include
-- FLAC: YES - under: C:/msys64/mingw64/include
-- OGG: YES - under: C:/msys64/mingw64/include
-- THEORA: YES - under: C:/msys64/mingw64/include
-- OpenSSL: YES - under: C:/Program Files/OpenSSL-Win64/include
Adding Tests to Tester
Tests were added to Tester. The List:
- TestWindowMain.TestingTest
-- Configuring done
-- Generating done
Тестер main.cpp это просто:
#include <gtest/gtest.h>
int main(int argc, char **argv) {
::testing::InitGoogleTest(amp;argc, argv);
return RUN_ALL_TESTS();
}
И единственный исходный файл тестера рядом с основным-это window_main.cpp:
#include <gtest/gtest.h>
#include <window_main.h>
TEST(TestWindowMain, TestingTest){
EXPECT_EQ(0,0) << "Test succeeded!";
EXPECT_EQ(0,1) << "Test failed!";
}
It includes the Project1s window_main.h and should run these two dummy tests..
But all i come up with, is this (tests end fatal):
Link to Image on ddgobkiprc33d.cloudfront.net
Der Test für das Projekt "Tester" ist abgestürzt.
Command line: [Path to Project build folder]_Build/Tester.exe
PATH: C:Qt5.15.2mingw81_64lib;C:Qt5.15.2mingw81_64bin;C:msys64mingw64lib;C:msys64mingw64bin;C:QtToolsmingw810_64x86_64-w64-mingw32lib;C:QtToolsmingw810_64x86_64-w64-mingw32bin;C:Program FilesOpenSSL-Win64lib;C:Program FilesOpenSSL-Win64bin;C:QtToolsmingw810_64bin;C:Perl64bin;C:UsersbdcpaAppDataRoamingActiveStatebin;C:Program Files (x86)Common FilesOracleJavajavapath;C:Program Files (x86)Common FilesIntelShared Librariesredistintel64_wincompiler;E:OculusSupportoculus-runtime;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:WindowsSystem32OpenSSH;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesMicrosoft SQL Server130ToolsBinn;C:Program FilesMicrosoft SQL ServerClient SDKODBC170ToolsBinn;C:Program Filesdotnet;C:Program Files (x86)GtkSharp2.12bin;E:Programmedepot_tools;C:msys64mingw64bin;C:msys64mingw32bin;C:msys64usrbin;C:QtToolsmingw810_64bin;C:QtToolsmingw810_64x86_64-w64-mingw32bin;C:QtToolsmingw810_64libpkgconfig;C:QtToolsmingw810_64x86_64-w64-mingw32libpkgconfig;D:Angleangleinclude;C:Qt5.15.2mingw81_64include;E:File DownloadsSDL2-2.0.14SDL2;D:Lua;D:Luajit_Source;D:Luajit_Build;E:ProgrammeGitcmd;C:Program Files (x86)Windows Kits10Windows Performance Toolkit;C:Program FilesOpenSSL-Win64;C:Program FilesCMakebin;C:UsersbdcpaAppDataLocalactivestatebin;E:Programmedepot_tools;C:msys64mingw64bin;C:msys64mingw32bin;C:msys64usrbin;C:QtToolsmingw810_64bin;C:QtToolsmingw810_64x86_64-w64-mingw32bin;C:Program FilesCMakebin;C:QtToolsNinja;C:Usersbdcpa.dotnettools;C:Python27;D:Microsoft VS Codebin;D:Angleangleinclude;E:File DownloadsSDL2-2.0.14SDL2;D:Lua;D:Luajit_Source;D:Luajit_Build;C:Program FilesOpenSSL-Win64;
Ausführungskonfiguration: "Tester"
Both Tests end up fata with all the Paths of my Sytem Environment..
I´m not really advanced in doing tests.. this is my first time trying that stuff out.. so.. it would be nice if you cen help me here 😀
Ps.: The Test (TestWindowMain.TestingTest) was added without a Problem.
PPs.: pls forgive some bad grammar or typos.. i´m not a native english speaker or writer.. i´m german ^^»