준호씨의 블로그
c - google test 로 c 언어 테스트 하기 본문
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)
자세한건 아래 참고 자료들을 참고.
참고
- Using Google Test To Unit Test C Code 2014.03.21
- gtest_c.h 등 만들어서 c 용 gtest helper 파일 만들었음
- Unit Testing C code with the GoogleTest framework 2009.11.09
- include c file 로 했음
- https://www.jetbrains.com/help/clion/creating-google-test-run-debug-configuration-for-test.html
- https://blog.jetbrains.com/clion/2015/10/new-clion-1-2-eap-build-brings-you-google-test/
'개발이야기' 카테고리의 다른 글
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 |