Google Test 사용법 예제


Google Test 사용법 예제
Google에서 개발된 C++ 테스트 프레임 워크인 gtest 사용법 예제 대해서 설명드리도록 하겠습니다. 소스코드를 다운 받고, 테스트 케이스를 작성하여 빌드, 테스트하는 전체 과정에 대해서 설명드리도록 하겠습니다.

이 글에서 설명드리는 전체 예제 코드는 아래의 명령어로 한 번에 다운 받으실 수 있습니다.

$ git clone https://hiseon.me/reps/gtest.git && cd gtest
$ git submodule init
$ git submodule update

소개

Google Test(gtest)는 Linux, Mac OS X, Windows, Cygwin, MinGW 등 다양한 플랫픔을 지원하며, Chrome 브라우저와 Chrome OS 등의 Chromium 프로젝트와 LLVM 컴파일러, OpenCV 등 구글 프로젝트 뿐만 아니라 다양한 오픈소스에서 C/C++ 테스트 프레임워크로 사용되고 있습니다.

테스트 프레임워크가 다양한 환경에서 빌드되고 사용될 수 있도록 최소 요구사항을 만족하는 대부분의 환경에서 사용되고 있습니다.
리눅스 환경에서 어떻게 프로젝트에서 Google Test 프레임워크가 사용될 수 있는지 간단한 예제를 통해서 설명드리도록 하겠습니다.

Google Test 설치

소프트웨어가 개발되는 프로젝트 디렉터리가 gtest라는 가정하에 설명드리도록 하겠습니다.
프로젝트 디렉터리에 바로 googletest 소스코드를 다운받는데, 원하시는 위치로 변경하셔서 다운 받으셔도 됩니다.

$ mkdir gtest && cd gtest
gtest$ git clone https://github.com/google/googletest

먼저 위의 명령어로 Google Test 프레임워크 소스코드를 다운 받습니다.
그리고 다음 명령어를 이용하여 빌드 디렉터리를 만들어 주시고, 프레임워크를 빌드해 주시면 됩니다.
개발 환경에 맞춰서 Google Test프레임워크가 빌드되어 사용되어져야 하기에, 시스템에 설치하는 명령어는 지원되지 않습니다.

빌드된 후에 생성되는 libgtest.a 파일을 사용하여 프로젝트 테스트 케이스를 빌드해 주시면됩니다.

gtest$ cd googletest/googletest
googletest/googletest$ mkdir build
googletest/googletest$ cd build/
googletest/googletest/build$ cmake ..
-- Build files have been written to: /home/ubuntu/Desktop/gtest/googletest/googletest/build
googletest/googletest/build$ make

Google Test 예제

테스트할 모듈 개발
gtest 예제 파일로 테스트가 될 파일을 만들겠습니다. 간단하게 sum 함수를 구현해 볼 예정으로 전체 기능이 아닌 빌드가 되는 최소한의 코드만 작성합니다. 먼저 sum.h 헤더파일은 아래와 같이 함수의 원형만 작성합니다.

int sum(int a, int b);

그리고 sum.cc 라는 파일은 함수의 내용을 아래와 같이 작성합니다.

#include "sum.h"

int sum(int a, int b) {
  return 0;
}

테스트 케이스 작성
위에서 만든 모듈또는 함수를 테스트하는 테스트 케이스를 sum_test.cc 파일로 아래와 같이 작성합니다.

#include <stdio.h>
#include <gtest/gtest.h>

#include "sum.h"

TEST(test_case_name, test_name) {
  EXPECT_EQ(2, sum(1,1));
}

int main(int argc, char **argv) {
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

프로젝트 실행 파일 작성
아래와 같은 내용의 main.cc 파일을 작성합니다.

#include <stdio.h>
#include "sum.h"

int main() {
  printf("sum : %d\n", sum(1, 1));

  return 0;
}

빌드 스크립트 작성
소스코드를 빌드 할 수 있는 Makefile 스크립트를 아래와 같이 작성합니다.

GTEST_DIR=googletest/googletest
all:
	g++ -o main main.cc sum.cc
test:
	g++ -o sum_test sum_test.cc sum.cc -isystem ${GTEST_DIR}/include -L${GTEST_DIR}/build -pthread -lgtest
	./sum_test

테스트 케이스 빌드 및 실행
다음 명령어로 테스트케이스를 빌드하고 실행합니다.

$ make test
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from test_case_name
[ RUN      ] test_case_name.test_name
sum_test.cc:7: Failure
Expected equality of these values:
  2
  sum(1,1)
    Which is: 0
[  FAILED  ] test_case_name.test_name (0 ms)
[----------] 1 test from test_case_name (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (1 ms total)
[  PASSED  ] 0 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] test_case_name.test_name

 1 FAILED TEST
Makefile:7: recipe for target 'test' failed
make: *** [test] Error 1

sum.cc 파일에서 함수를 구현 할때, 0으로 리턴하기 때문에 테스트 케이스가 통과되지 않는 것을 알 수 있습니다.
sum 함수를 a+b를 리턴하는 내용으로 수정하시고, 다시 테스트케이스를 실행하면 다음과 같이 통과되는 것을 알 수 있습니다.

[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from test_case_name
[ RUN      ] test_case_name.test_name
[       OK ] test_case_name.test_name (0 ms)
[----------] 1 test from test_case_name (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[  PASSED  ] 1 test.

지금까지 Google Test 사용법 예제를 설명드렸습니다. 소프트웨어 개발하는데 도움이 될 수 있기에 패치 파일 작성 방법 링크를 추가합니다. 필요하신 분들을 참고해 주시면 될 듯합니다.

diff patch 사용법

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)