[1. 개요]
구글에서 만든 C++ Unit Test Framework
- 테스트는 독립적이고 반복할 수 있도록 한다.
- 관련된 테스트를 TestSuite 로 그룹화하여 데이터와 Subroutine 을 공유할 수 있도록 한다.
- 플랫폼에 종속되지 않다.
=> 윈도우 / 리눅스 / 맥에서 모두 지원 됨 - 테스트 실패 시 왜 실패했는지 알려준다.
=> File / Line / Call Stack? - 테스트 자체에 집중 할 수 있도록 해준다.
- 공유 자원을 테스트 간에 재사용 할 수 있고, 한번 만 실행되는 SetUp / TearDown 와 같은 함수를 사용 할 수 있다.
[2. 설치 (윈도우)]
- 소스코드 다운로드
- 컴파일
=> 소스코드 압축 해제 (가급적 배포버전을 기준으로)
https://github.com/google/googletest
=> mkdir build
=> cd build
=> cmake .. -Dgtest_force_shared_crt=ON
# 기본적으로 Visual studio project 는 C runtimes 를 동적으로 링킹하지만, GoogleTest 는 정적으로 링킹 함
따라서 일반적인 cmake .. 으로 한 라이브러리에서는 컴파일 에러가 발생 함
GoogleTest 빌드 옵션을 바꾸려면 cmake 시 gtest_force_shared_crt 옵션을 ON 으로 해야 함.
https://github.com/google/googletest/blob/main/googletest/README.md
=> googletest-distribution.sln 오픈 후 빌드 진행 (Debug 와 Release 모두에 대해서 진행)
=> lib/Debug 와 lib/Release 에서 googletest 라이브러리 파일을 확인 할 수 있다.
=> gmock.lib / gmock_main.lib / gtest.lib / gtest_main.lib - CMake 설정
=> GTEST_ROOT 로 잡을 경로 밑에 include 와 lib 폴더를 생성
=> include 폴더에는 소스코드 경로를 기준으로 googletest/include 밑에 있는 모든 파일을 복사 시킴
=> lib 폴더에는 Release 와 Debug 로 빌드된 lib 파일을 복사 시킴
# 보통 윈도우에서는 msvc 로 빌드하는 경우가 대다수 이므로, GTEST_MSVC_SEARCH 라는 캐시 변수를 참조해서 디렉터리 구조를 나눌 수 있으나 굳이 이렇게까지 할 필요가 있는가?
## gtest_force_shared_crt 와 관련이 있어 보임.
[3. 설치 (리눅스)]
윈도우와 같은 비슷한 방식
- 소스코드 다운로드
=> wget 을 이용해서 zip 또는 tar.gz 를 다운로드 - 컴파일
=> mkdir build
=> cd build
=> cmake ..
=> make && sudo make install
# make install 하면 헤더파일 등은 /usr/local/include 로, 아카이브 파일은 /usr/local/lib 에 복사시켜주므로
별도의 CMake 사전 설정은 필요 없어 보임
# 테스트 프로그램 개발 시 pthread 링킹이 필요 함