C++ 프로젝트에서 단위 테스트와 목 객체 작성을 한 번에 처리하는 방법
작성한 테스트 코드를 수동으로 등록하지 않아도 자동으로 실행되고, 복잡한 로직의 오류를 조기에 잡아낼 수 있습니다. GoogleTest는 C++ 프로젝트에서 단위 테스트와 목(mock) 객체 작성을 위한 도구로, 과거에 분리되어 있던 GoogleTest와 GoogleMock 프로젝트를 통합하여 유지보수하고 있습니다. 최신 버전 1.18.0은 C++17 이상을 요구하며, 문서는 GitHub Pages에서 제공합니다.
자동 발견과 다양한 검증 방식
GoogleTest는 xUnit 아키텍처를 기반으로 하며, 테스트를 자동으로 찾아 실행합니다. 동등성, 불평등성, 예외 발생 여부 등 다양한 내장 어설션을 사용할 수 있고, 프로젝트에 특화된 커스텀 어설션도 정의할 수 있습니다. 프로세스가 특정 방식으로 종료되는지 확인하는 데스 테스트(death test)를 지원하여 에러 처리 코드를 검증하는 데 유용합니다. 테스트 실패 시 치명적(fatal)으로 처리할지 아니면 실행을 계속할지(non-fatal) 지정할 수도 있어 디버깅 유연성을 높입니다.
파라미터화 테스트와 실행 제어
함수에 다른 입력값을 대입해 여러 번 실행하는 값 파라미터화 테스트와, 다른 데이터 타입으로 실행하는 타입 파라미터화 테스트를 지원합니다. 이는 다양한 입력 조건이나 타입을 다루는 함수를 효율적으로 테스트할 때 적합합니다. 실행 옵션도 다양하여 개별 테스트 실행, 특정 순서 실행, 병렬 실행 등을 선택할 수 있습니다.
지원 플랫폼과 주요 사용 사례
GoogleTest는 구글의 기초 C++ 지원 정책을 따르며, 현재 지원되는 컴파일러, 플랫폼, 빌드 도구 목록은 공식 문서에서 확인할 수 있습니다. 크로미움 프로젝트, LLVM 컴파일러, 프로토콜 버퍼, OpenCV 등 대규모 오픈소스 프로젝트에서 사용되고 있습니다.
주변 도구 생태계
GoogleTest와 함께 사용할 수 있는 여러 오픈소스 도구가 존재합니다. GTest Runner는 Qt5 기반의 자동화 테스트 러너이고, GoogleTest UI는 C#으로 작성된 테스트 진행 상황 추적 도구입니다. gtest-parallel은 테스트를 병렬로 실행해 속도를 높여주는 도구이며, VS Code 확장 프로그램인 GoogleTest Adapter와 C++ TestMate는 트리 뷰로 테스트를 확인하고 디버깅할 수 있게 해줍니다. 또한 TAP 프로토콜을 구현한 리스너나 Gherkin DSL 파서인 Cornichon도 있습니다.
도입 전 확인 사항
또한 향후 Abseil 라이브러리에 대한 의존성이 추가될 계획이므로, 이 의존성이 프로젝트에 미치는 영향을 고려해야 합니다. 공식 문서는 이제 GitHub Pages에서 제공되므로, 저장소 내 문서보다는 웹 문서를 참고하는 것이 좋습니다. 구글 내부 시스템은 CI에 사용되지만, 외부 사용자는 자체 CI 환경을 구성해야 합니다.