본문 바로가기

BSMath

CMake, Google Test, Github Action을 통한 테스트 자동화

테스트의 필요성

 BSMath는 Header-Only Library이다. 또한 템플릿이 굉장히 많이 사용되었다. 그렇기에 테스트가 정상적으로 수행되는가 이전에, 테스트 코드가 컴파일이 되는가만 보아도 많은 에러를 고칠 수 있다. 그렇기에 테스트를 프로젝트에 도입하게 되었다. 

 

CMake

CMake란?

 CMake는 한마디로 요약하면 Multi-Platform Meta Make이다. 기존의 make를 통해서도 빌드는 가능하지만, 이를 추상화하여 간단하게 빌드 스크립트를 작성할 수 있다. 무엇보다도 CMake는 Windows 환경에서 수행 시 Solution 파일을 생성하는 등 다양한 플랫폼에서 동작한다. 그렇기에 프로젝트의 크기는 작지만, 개발은 Windows에서, 테스트는 Linux 환경에서 수행하는 BSMath의 특성에 맞게 CMake를 선택하였다. CMake의 작성법 등은 타 사이트에 상세히 나와있으니 그것을 참고하길 바란다.

 

CMake와 Visual Studio 통합하기

 Visual Studio는 CMake와의 통합을 지원한다. (Windows용 C++ CMake 도구를 설치해야 한다.) 방법은 2가지로, 새 CMake 프로젝트를 선택해 간단한 템플릿과 함께 처음부터 시작하는 방법과, CMakeLists.txt 등의 기본적인 파일을 미리 생성한 후에 로컬 폴더 열기를 통해 프로젝트를 여는 방법이다. 나는 후자를 선택해서 프로젝트를 진행하였다.

 

Google Test

Google Test란?

 Google Test는 Google에서 제작한 C++ 단위 테스트 프레임워크이다. 이 역시 멀티 플랫폼을 지원하며, 사용법이 간단하다. 또한 Visual Studio, CMake와의 통합을 지원하기에 선택하게 되었다. Google Test 역시 타 사이트에 사용법이 나와있기에 그것을 참고하길 바란다.

 

CMake와 통합하기

  1. 'enable_testing' 명령어로 CMake의 Test를 활성화한다.
  2. GTest Package를 찾는다. (Linux 환경의 경우 그전에 Threads Package를 찾아야 한다.)
  3. Test 파일들을 'add_executable'로 실행 파일에 추가한다.
  4. Test 파일에 테스트를 할 소스의 헤더와 Google Test의 헤더를 추가고 라이브러리를 Link 한다.
    • Google 테스트의 헤더는 GTEST_INCLUDE_DIR 변수에 정의되어 있고, 모듈은 GTest::GTest이다.
    • 테스트 파일은 다른 곳에서 참조하지 않는 말단 모듈이기에 Private로 Include, Link해도 된다.
  5. 'add_test' 명령어를 통해 테스트의 이름과 테스트 실행 파일을 설정한다.

성공적으로 설정이 되었다면, Visual Studio의 테스트 탐색기 창을 통해 현재 테스트 목록과 성공 여부, 기간을 확인할 수 있는 것은 물론, 디버깅까지 할 수 있다.

 

CMake의 Test 설정 부분과 Visual Studio에서 적용이 된 모습

 

Github Action

Github Action이란?

 Github Action은 소프트웨어의 workflow를 자동화할 수 있도록 도와주는 도구로 이름에 쓰여있듯이, Github에서 지원하는 기능이다. Push나 Pull Request 등 특정한 이벤트가 들어올 때 실행된다. 웹 서버를 하는 친구들은 이를 통해 CI/CD를 전부 한다고 한다. 그러나 BSMath는 Deploy와는 관계가 없고 그냥 Test만 하면 된다.

 

Github Action 사용하기

 Github Action을 사용할 Repository에 들어가서 Actions를 누르면 여러 Workflow Template들이 있다. 그중에 CMake based projects라는 템플릿을 이용하면 간편하게 할 수 있다. 그 후 yml을 통해 workflow script를 작성해야 한다. BSMath는 다음의 workflow를 사용한다.

BSMath의 workflow

 

결론

 위 3가지 작업들을 통해 Linux 환경에서의 테스트를 자동화하였다. Github Actions는 Matrix 인자를 통해 여러 환경에서 테스트가 가능하다. 추후 Clang, MSVC 등 다양한 환경에서의 테스트를 추가할 것이다.

'BSMath' 카테고리의 다른 글

SSE2를 이용한 Vector, Matrix 구축  (0) 2020.10.09
현대 컴파일러에서의 inline 함수  (0) 2020.10.07
Random의 객체 기반 설계  (0) 2020.10.07