준호씨의 블로그

c - google test 로 c 언어 테스트 하기 본문

개발이야기

c - google test 로 c 언어 테스트 하기

준호씨 2018. 8. 1. 22:07
반응형

google test 는 cpp 를 기반으로 한다. 그래서 일반적인 방법으로는 c 코드나 c 라이브러리를 테스트를 할 수 없다.

c 코드를 테스트 하려고 하면 "Undefined symbols" 같은 오류를 만나게 된다.

c 코드를 테스트 하는 방법들에 대해 적어 본다.

개발툴은 CLion 을 사용 할 것이다.

include c file

꼼수를 좀 부려 보면 include 할 때 h (header) 파일이 아니고 c 파일을 include 하면 된다.

june.h june.c 로 된 코드가 있다면

#include "june.h"

대신

#include "june.c"

로 하면 된다. 하지만 include c 파일을 한다는게 좀 그렇다. 어쩔 수 없는 상황에서는 쓰게 될 것도 같은데 실제로 이런 경우는 겪어 보진 못했다.

header 파일에 extern "C"

아래와 같이 cplusplus 가 define 되어 있는 경우 extern "C" { 로 감싸 도록 처리 해 준다. cpp 로 컴파일 하면 cplusplus 가 선언 된다는 점을 이용해서 cpp 로 빌드 할 때는 extern "C" { 를 추가 해 주고 그냥 c 로 빌드 할 때는 넣지 않는 방법이다.

#ifdef __cplusplus
extern "C" {
#endif

// 기존 내용

#ifdef __cplusplus
}
#endif

header 중복 include 방지를 위한 로직이 필요하면 더 상위에 감싼다.

#ifdef __JUNE_H__
#define __JUNE_H__

#ifdef __cplusplus
extern "C" {
#endif

// 기존 내용

#ifdef __cplusplus
}
#endif

#endif

꼭 C 만을 써야 되는 상황이 아니라면 이런 방법을 이용해서 단계적으로 cpp 로 넘어 가는 것이 좋을 거 같다.

프로젝트 생성

프로젝트를 생성 한다.

google test 다운로드

https://github.com/google/googletest 에서 다운 받을 수 있다. 프로젝트에 적당한 위치에 git clone 하면 된다.

테스트 디렉토리 생성

  • ex) my_tests, tests

테스트 디렉토리에 CMakeLists.txt 작성

cmake_minimum_required(VERSION 3.10)

include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})

add_executable()
if (APPLE)
    add_definitions(-DGTEST_USE_OWN_TR1_TUPLE)
    add_definitions(-D__GLIBCXX__)
endif (APPLE)

자세한건 아래 참고 자료들을 참고.

참고

반응형

'개발이야기' 카테고리의 다른 글

kill default 는 -15 SIGTERM  (0) 2018.08.01
Clojure, 리스프, 폴그레이엄, 해커와 화가  (0) 2018.08.01
c - libgd 관련 메모  (0) 2018.08.01
javascript - unit testing  (0) 2018.08.01
perl - lib 경로 관련  (0) 2018.08.01
Comments