본문 바로가기

C++/GoogleTest

GoogleTest 개요 및 설치

[1. 개요]

구글에서 만든 C++ Unit Test Framework

  • 테스트는 독립적이고 반복할 수 있도록 한다.
  • 관련된 테스트를 TestSuite 로 그룹화하여 데이터와 Subroutine 을 공유할 수 있도록 한다.
  • 플랫폼에 종속되지 않다.
    => 윈도우 / 리눅스 / 맥에서 모두 지원 됨
  • 테스트 실패 시 왜 실패했는지 알려준다.
    => File / Line / Call Stack?
  • 테스트 자체에 집중 할 수 있도록 해준다.
  • 공유 자원을 테스트 간에 재사용 할 수 있고, 한번 만 실행되는 SetUp / TearDown 와 같은 함수를 사용 할 수 있다.

[2. 설치 (윈도우)]

  1. 소스코드 다운로드
  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
  3. CMake 설정
    => GTEST_ROOT 로 잡을 경로 밑에 includelib 폴더를 생성
    => include 폴더에는 소스코드 경로를 기준으로 googletest/include 밑에 있는 모든 파일을 복사 시킴
    => lib 폴더에는 Release 와 Debug 로 빌드된 lib 파일을 복사 시킴
    # 보통 윈도우에서는 msvc 로 빌드하는 경우가 대다수 이므로, GTEST_MSVC_SEARCH 라는 캐시 변수를 참조해서 디렉터리 구조를 나눌 수 있으나 굳이 이렇게까지 할 필요가 있는가?
    ## gtest_force_shared_crt 와 관련이 있어 보임.

[3. 설치 (리눅스)]
윈도우와 같은 비슷한 방식

  1. 소스코드 다운로드
    => wget 을 이용해서 zip 또는 tar.gz 를 다운로드
  2. 컴파일
    => mkdir build
    => cd build
    => cmake ..
    => make && sudo make install
    # make install 하면 헤더파일 등은 /usr/local/include 로, 아카이브 파일은 /usr/local/lib 에 복사시켜주므로
    별도의 CMake 사전 설정은 필요 없어 보임
    # 테스트 프로그램 개발 시 pthread 링킹이 필요 함