나는 누군가에게 도움이 될 수 있기를 희망하면서 이전에 게시 한 답변과 다른 방법을 보여주는 일반적인 것을 함께 던지기로 결정했습니다. 다음은 내 Mac에서 나를 위해 일했습니다. 먼저 gtest에 대한 설정 명령을 실행했습니다. 방금 찾은 스크립트를 사용하여 모든 것을 설정했습니다.
#!/usr/bin/env bash
# install gtests script on mac
# https://gist.github.com/butuzov/e7df782c31171f9563057871d0ae444a
#usage
# chmod +x ./gtest_installer.sh
# sudo ./gtest_installer.sh
# Current directory
__THIS_DIR=$(pwd)
# Downloads the 1.8.0 to disc
function dl {
printf "\n Downloading Google Test Archive\n\n"
curl -LO https://github.com/google/googletest/archive/release-1.8.0.tar.gz
tar xf release-1.8.0.tar.gz
}
# Unpack and Build
function build {
printf "\n Building GTest and Gmock\n\n"
cd googletest-release-1.8.0
mkdir build
cd $_
cmake -Dgtest_build_samples=OFF -Dgtest_build_tests=OFF ../
make
}
# Install header files and library
function install {
printf "\n Installing GTest and Gmock\n\n"
USR_LOCAL_INC="/usr/local/include"
GTEST_DIR="/usr/local/Cellar/gtest/"
GMOCK_DIR="/usr/local/Cellar/gmock/"
mkdir $GTEST_DIR
cp googlemock/gtest/*.a $GTEST_DIR
cp -r ../googletest/include/gtest/ $GTEST_DIR
ln -snf $GTEST_DIR $USR_LOCAL_INC/gtest
ln -snf $USR_LOCAL_INC/gtest/libgtest.a /usr/local/lib/libgtest.a
ln -snf $USR_LOCAL_INC/gtest/libgtest_main.a /usr/local/lib/libgtest_main.a
mkdir $GMOCK_DIR
cp googlemock/*.a $GMOCK_DIR
cp -r ../googlemock/include/gmock/ $GMOCK_DIR
ln -snf $GMOCK_DIR $USR_LOCAL_INC/gmock
ln -snf $USR_LOCAL_INC/gmock/libgmock.a /usr/local/lib/libgmock.a
ln -snf $USR_LOCAL_INC/gmock/libgmock_main.a /usr/local/lib/libgmock_main.a
}
# Final Clean up.
function cleanup {
printf "\n Running Cleanup\n\n"
cd $__THIS_DIR
rm -rf $(pwd)/googletest-release-1.8.0
unlink $(pwd)/release-1.8.0.tar.gz
}
dl && build && install && cleanup
다음으로 간단한 폴더 구조를 만들고 간단한 수업을 작성했습니다.
utils/
cStringUtils.cpp
cStringUtils.h
CMakeLists.txt
utils/tests/
gtestsMain.cpp
cStringUtilsTest.cpp
CMakeLists.txt
utils 폴더에 대해 최상위 CMakeLists.txt를 만들고 테스트 폴더에 대해 CMakeLists.txt를 만들었습니다.
cmake_minimum_required(VERSION 2.6)
project(${GTEST_PROJECT} C CXX)
set(CMAKE_C_STANDARD 98)
set(CMAKE_CXX_STANDARD 98)
#include .h and .cpp files in util folder
include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
##########
# GTests
#########
add_subdirectory(tests)
이것은 테스트 폴더의 CMakeLists.txt입니다.
cmake_minimum_required(VERSION 2.6)
set(GTEST_PROJECT gtestProject)
enable_testing()
message("Gtest Cmake")
find_package(GTest REQUIRED)
# The utils, test, and gtests directories
include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
include_directories("/usr/local/Cellar/gtest/include")
include_directories("/usr/local/Cellar/gtest/lib")
set(SOURCES
gtestsMain.cpp
../cStringUtils.cpp
cStringUtilsTest.cpp
)
set(HEADERS
../cStringUtils.h
)
add_executable(${GTEST_PROJECT} ${SOURCES})
target_link_libraries(${GTEST_PROJECT} PUBLIC
gtest
gtest_main
)
add_test(${GTEST_PROJECT} ${GTEST_PROJECT})
이제 남은 것은 gtest와 gtest main 샘플을 작성하는 것입니다.
샘플 gtest
#include "gtest/gtest.h"
#include "cStringUtils.h"
namespace utils
{
class cStringUtilsTest : public ::testing::Test {
public:
cStringUtilsTest() : m_function_param(10) {}
~cStringUtilsTest(){}
protected:
virtual void SetUp()
{
// declare pointer
pFooObject = new StringUtilsC();
}
virtual void TearDown()
{
// Code here will be called immediately after each test
// (right before the destructor).
if (pFooObject != NULL)
{
delete pFooObject;
pFooObject = NULL;
}
}
StringUtilsC fooObject; // declare object
StringUtilsC *pFooObject;
int m_function_param; // this value is used to test constructor
};
TEST_F(cStringUtilsTest, testConstructors){
EXPECT_TRUE(1);
StringUtilsC fooObject2 = fooObject; // use copy constructor
fooObject.fooFunction(m_function_param);
pFooObject->fooFunction(m_function_param);
fooObject2.fooFunction(m_function_param);
}
} // utils end
샘플 gtest 메인
#include "gtest/gtest.h"
#include "cStringUtils.h"
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
그런 다음 utils 폴더에서 다음 명령을 사용하여 gtest를 컴파일하고 실행할 수 있습니다.
cmake .
make
./tests/gtestProject
ExternalProject_Add
대신 을 사용하여 GTest 소스를 직접 포함하지 않을 수 있습니다add_subdirectory
. 자세한 내용은 이 답변 을 참조하십시오.