Exercism에서 C++ 연습 문제를 테스트하는 방법을 알아봐요
각 연습 문제에는 단위 테스트와 CMake 빌드 레시피가 함께 제공돼요. 구현은 직접 작성해요. 각 테스트 파일은 구현과 링크되어, 테스트를 실행하는 콘솔 실행 파일을 만들어요. 테스트 실행 파일을 실행하면 실패한 각 테스트에 대한 메시지를 출력하고, 테스트가 실패하면 0이 아닌 종료 상태를 보고해요.
참고: 프로젝트를 빌드할 때마다 코드는 테스트 스위트에 대해 테스트돼요. 유효한 C++ 코드지만 하나 이상의 테스트를 통과하지 못하더라도 컴파일은 여전히 돼요.
각 연습 문제를 푸는 과정은 다음과 같아요.
각 연습 문제에는 단위 테스트와 함께 CMakeLists.txt 파일이 딸려 와요. 이 파일에는 빌드를 대신 처리해 주는 미리 준비된 CMake 레시피가 들어 있어요. 이 파일은 따로 수정할 필요가 없어요. 제공된 레시피는 구현이 연습 문제 이름을 딴 헤더 파일과 소스 파일로 존재한다고 가정해요.
예를 들어 bob 연습 문제는 bob.h와 bob.cpp에 구현이 있기를 기대해요. 이름에 하이픈이 들어간 연습 문제라면 소스 파일은 밑줄을 쓴다고 가정해요. 그래서 word-count는 word_count.h와 word_count.cpp를 기대해요. 구현이 충분히 단순해서 헤더 파일에 전부 담을 수 있다고 판단되면 cpp 파일은 생략해도 돼요.
CMake를 실행하기 전에 최초 구현 파일을 먼저 만들어요. bob 연습 문제에서 CMake를 실행할 때 bob.h와 bob.cpp 파일이 없으면, CMake가 파일을 찾을 수 없다는 오류를 내요. 이 파일들은 비어 있어도 되지만, 반드시 존재해야 해요.
이 레시피를 사용하면, 알맞은 제너레이터와 연습 문제 디렉터리 위치를 지정해 cmake -G를 실행함으로써 환경에 맞는 프로젝트를 CMake가 생성할 수 있어요. CMake는 사용 중인 운영체제에 맞는 빌드 스크립트를 생성해요. 생성된 파일들을 연습 문제 소스 코드와 분리해 두려면, 생성된 빌드 파일과 컴파일된 코드를 담을 build라는 디렉터리를 만드는 것이 일반적이에요. 이렇게 하면 연습 문제 폴더를 깔끔하게 유지할 수 있어요.
CMake가 빌드 환경을 만들어 주면, 환경에 맞는 명령으로 코드를 빌드할 수 있어요.
make
make Exercism CLI 앱을 사용하는 경우
다양한 환경에서 CMake를 실행하는 예시는 아래와 같아요.
CMake의 제너레이터 이름은 Unix Makefiles예요. 현재 연습 문제가 bob이고 연습 문제 폴더에 있다고 가정해요.
$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make
이 예시는 CMake를 실행하기 전에 구현을 위한 빈 파일을 만드는 방법을 보여줘요.
빌드 디렉터리에서 make를 입력하기만 하면 테스트가 컴파일돼요. 그러면 컴파일 시점 오류가 발생할 거예요. 오류를 모두 고치면, make가 테스트를 빌드하고 실행해요.
Visual Studio는 CMake 프로젝트를 기본으로 지원하기 때문에, CMake를 따로 설치하거나 Visual Studio 밖에서 실행할 필요가 없어요. Visual Studio에서 CMake 프로젝트를 설정하려면 이 가이드를 따라 해요.
CMake의 제너레이터 이름은 Xcode예요. 현재 연습 문제가 bob이고 연습 문제 폴더에 있다고 가정해요.
$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G Xcode ..
이 예시는 XCode에서 프로젝트를 열 수 있도록 XCode 파일을 생성해요. XCode에서 프로젝트를 연 다음에는 다른 타깃을 추가해야 할 수도 있어요. 새 타깃을 만들려면 메뉴에서 File -> New -> Target으로 이동한 뒤, OS X \ Application \ Command Line Tool -> Next를 선택하고, 언어로 _C++_를 지정하고 타깃 이름을 입력해요. 그 타깃으로 코드를 실행해요.
터미널에서 Xcode x.x not supported 오류가 나오면, 컴퓨터에 Xcode가 설치되어 있지 않거나 버전이 오래된 경우일 가능성이 높아요. App Store나 이 링크를 통해 Xcode를 내려받아 설치해요. The CXX compiler identification is unknown과 비슷한 오류는 GCC 설치 안내를 따르거나 위 문단처럼 Xcode에서 다른 타깃을 추가하면 대부분 해결돼요.
CMake의 제너레이터 이름은 Unix Makefiles예요. 현재 연습 문제가 bob이고 연습 문제 폴더에 있다고 가정해요.
$ touch bob.{h,cpp}
$ cmake -G "Unix Makefiles" .
$ exercism test
이 예시에서는 CMake를 실행하기 전에 구현을 위한 빈 파일은 만들지만, 빈 빌드 디렉터리는 만들지 않아요. Exercism CLI가 루트 디렉터리의 .exercism/metadata.json 파일을 사용해 테스트 케이스를 분석하기 때문이에요.
루트 디렉터리에서 exercism test를 입력하기만 하면 테스트가 컴파일돼요. 그러면 컴파일 시점 오류가 발생할 거예요. 오류를 고친 뒤 exercism test를 다시 실행하면 Exercism CLI가 테스트를 빌드하고 실행해요.