-
구글 테스트 툴을 이용한 UnitTest용 CMakefileModern C++ 2020. 9. 6. 15:05
FetchContent는 Modern CMake에 추가된 기능으로 ExternalProject 를 통해서 이루어지던 방법들을 통해 외부 프로젝트를 설정 시간에 이동 시킬 수 있다. FetchContent를 사용하기 위해서는 include를 통해서 해당 모듈을 추가시키고 FetchContent_Declare를 통해 외부 프로젝트의 저장소를 정의 한다. FetchContent로 설정된 외부 프로젝트의 설정은 FetchContent_Populate()를 통해서 이루어 지고
해당 프로젝트를 add_subdirectory를 통해서 소스 디렉토리와 바이너리 디렉토리를 현재 프로젝트에 추가한다.
#CMake 에서 FetchContent 모듈을 사용을 위해 include include(FetchContent) #외부 프로젝트인 googletest를 추가하기 위한 저장소 지정 FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG release-1.10.0 ) project(crypto_algorithm) set(CMAKE_CXX_STANDARD 17) #googletest의 프로퍼티를 가져와 현재 프로젝트가 populate 되지 않았으면 #FetchContent_Populate를 통해서 하위 빌드 설정 FetchContent_GetProperties(googletest) if(NOT googletest_POPULATED) #googletest를 빌드하기위한 sub-build 구성 FetchContent_Populate(googletest) add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR}) include_directories(${gtest_SOURCE_DIR}/include ${gmock_SOURCE_DIR}/include) endif()
googletest를 사용해 단위 테스트를 위한 CMakefile은 아래와 같이 구성할 수 있다.
cmake_minimum_required(VERSION 3.17) include(FetchContent) FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG release-1.10.0 ) project(crypto_algorithm) set(CMAKE_CXX_STANDARD 17) FetchContent_GetProperties(googletest) if(NOT googletest_POPULATED) FetchContent_Populate(googletest) add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR}) include_directories(${gtest_SOURCE_DIR}/include ${gmock_SOURCE_DIR}/include) endif() add_executable(test_case utility.h integer_module_test.cpp) #단위 테스트를 위해 libgtest, libgtest_main 라이브러리 링크 target_link_libraries(test_case gtest gtest_main)
utility.h
#include<iostream> //최대 공약수 함수 template <typename T, typename std::enable_if<std::is_integral_v<T>>::type * = nullptr> T gcd(T a, T b) { if (b == 0) return a; return gcd( b, a % b); }
integer_modue_test.cpp
#include <gtest/gtest.h> #include "utility.h" TEST(gcd_test_case, gcd_test) { EXPECT_EQ(6, gcd(12, 6)); } int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
위 프로젝트 파일을 통해 googletest 를 이용해 유닛 테스트가 어떻게 동작하는 지 확인하고싶다면 프로젝트를위한 폴더를 생성하고
위의 세 파일을 만든다음 빌드가 동작할 cmake-build-debug 폴더를 생성하고 해당 폴더로 이동 후 ./cmake .. 를 호출하면 된다.
$ mkdir cmake-build-debug $ cd cmake-build-debug $ cmake -DCMAKE_BUILD_TYPE=Debug ../ $ make $ ./test_case 또는 수행할 단위 테스트를 필터링 할 수 있음 $ ./test_case --gtest_filter=gcd_test_case.gcd_test
'Modern C++' 카테고리의 다른 글
RSA 인증 (0) 2020.09.06