반응형

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

전체 구성 요약

  1. CMakeLists.txt 파일에 커버리지 플래그를 설정하여 컴파일러에 전달합니다.
  2. lcov와 genhtml을 사용하여 커버리지 데이터를 수집하고 HTML 리포트를 생성합니다.

이 구성을 통해 CMake 기반 프로젝트에서 손쉽게 코드 커버리지 리포트를 생성하고 확인할 수 있습니다.

반응형