C/Unit Test
CMake를 활용해 Gtest 코드커버리지 뽑기
2024. 11. 13. 01:28반응형
CMake와 Google Test를 사용하여 코드 커버리지 리포트를 생성하는 방법을 설명드리겠습니다. 이 예제에서는 gcov, lcov, genhtml을 사용하여 CMake 빌드 시스템에서 코드 커버리지 리포트를 생성하는 방법을 보여줍니다.
예제 프로젝트 구성
기본적인 파일 구조는 다음과 같습니다.
project-root/
├── CMakeLists.txt
├── add.h
├── add_test.cpp
└── build/
1. 소스 코드 및 테스트 파일 준비
add.h와 add_test.cpp 파일은 이전의 간단한 예제 코드와 동일합니다.
- add.h
#ifndef ADD_H
#define ADD_H
int add(int a, int b) {
return a + b;
}
#endif // ADD_H
- add_test.cpp
#include <gtest/gtest.h>
#include "add.h"
TEST(AdditionTest, HandlesPositiveNumbers) {
EXPECT_EQ(add(1, 2), 3);
EXPECT_EQ(add(5, 5), 10);
}
TEST(AdditionTest, HandlesNegativeNumbers) {
EXPECT_EQ(add(-1, -2), -3);
EXPECT_EQ(add(-5, 5), 0);
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
2. CMake 설정 파일 (CMakeLists.txt)
이제 CMakeLists.txt 파일을 생성하여 코드 커버리지 옵션을 설정하겠습니다.
cmake_minimum_required(VERSION 3.10)
project(CoverageExample)
# Google Test를 찾고 include 경로 설정
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
# 커버리지 설정 플래그
option(CODE_COVERAGE "Enable coverage reporting" ON)
if(CODE_COVERAGE)
add_compile_options(--coverage -O0 -g) # --coverage 플래그 추가
add_link_options(--coverage)
endif()
# add_test 대상 생성
add_executable(add_test add_test.cpp)
target_link_libraries(add_test ${GTEST_LIBRARIES} pthread)
이 CMake 파일에서:
- CODE_COVERAGE 옵션이 활성화되어 있으면 --coverage, -O0, -g 플래그를 추가합니다.
- 이 옵션을 통해 코드 커버리지 데이터를 생성할 수 있게 설정됩니다.
3. CMake 빌드 및 실행
(1) 빌드 디렉토리 생성 및 빌드
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
(2) 테스트 실행
./add_test
(3) 커버리지 리포트 생성
lcov와 genhtml을 사용하여 HTML 형식의 커버리지 리포트를 생성합니다
# 커버리지 데이터 수집
lcov --capture --directory . --output-file coverage.info
# 불필요한 커버리지 데이터 제거 (C++ 표준 라이브러리 등)
lcov --remove coverage.info '/usr/*' --output-file coverage.info
# HTML 리포트 생성
genhtml coverage.info --output-directory out
(4) 리포트 확인
HTML 리포트는 out 디렉토리에 생성되며, 웹 브라우저를 통해 확인할 수 있습니다.
xdg-open out/index.html
전체 구성 요약
- CMakeLists.txt 파일에 커버리지 플래그를 설정하여 컴파일러에 전달합니다.
- lcov와 genhtml을 사용하여 커버리지 데이터를 수집하고 HTML 리포트를 생성합니다.
이 구성을 통해 CMake 기반 프로젝트에서 손쉽게 코드 커버리지 리포트를 생성하고 확인할 수 있습니다.
반응형
'C > Unit Test' 카테고리의 다른 글
[Unit Test] libgtest-dev 지우기 (0) | 2024.11.22 |
---|---|
Makefile로 C++ 파일을 Gtest와 Gcov를 이용해서 커버리지 리포트 산출하기 (0) | 2024.11.21 |
gtest 및 lcov를 활용하여 Unit Test 실행하고 Coverage Report 뽑기 (2) | 2024.11.13 |
gtest를 활용하여 Unit Test 실행하기 (2) | 2024.11.13 |
gcov를 이용하여 Coverage Report 산출하기 (C, C++) (2) | 2024.11.13 |