개발/개발 노트

C++ UnitTest 프로젝트 만들기

로파이 2022. 1. 30. 17:14

C++ UnitTest 프로젝트를 만드는 방법을 알아본다.

 

단위 테스트는 테스트 주도 개발(TDD)에서 가장 기본이 되는 테스트 방법으로 자신이 만든 함수나 클래스를 테스트하고 올바르게 동작하는 지 확인함에 있다.

 

몇 가지 테스트 케이스를 두고 입력에 따른 올바른 결과가 나오는 지 확인하는 것을 보통 사용한다.

테스트 케이스가 모든 가능한 경우를 테스트한 다고 볼 수는 없지만 기본적으로 자신이 만든 함수에 대해 기본 기능은 보장한다고 할 수 있다. 또한 다른 작업자가 해당 코드를 나중에 수정할 경우에도 동일한 단위 테스트가 성공할 것을 보장하여 개발 신뢰성을 높일 수 있다.

 

참고

https://docs.microsoft.com/ko-kr/visualstudio/test/writing-unit-tests-for-c-cpp?view=vs-2022

 

Visual Studio Installer

비주얼 스튜디오 설치관리자에서 수정을 눌러 C++을 사용한 데스크톱 개발이 설치되어 있는지 확인한다.

 

테스트 프로젝트 만들기

테스트 대상이 되는 빈 프로젝트를 만든다. 실제로는 테스트 대상이 되는 프로젝트를 가리킨다.

 

단위 테스트 프로젝트 추가

솔루션에서 새 프로젝트 추가를 통해 단위 테스트 프로젝트를 추가한다.

C++ 단위 테스트 용으로 비주얼 스튜디오는 MSUnitTest, Google.Test, Boost.Test등의 기본 프레임워크를 제공한다. 여기서는 MSUnitTest를 추가한다.

 

기본 유닛 테스트 프로젝트를 추가하면 미리 컴파일된 헤더 파일과 UnitTest 소스 파일이 생성된다.

UniTest 소스 파일을 보면 필요한 네임스페이르를 포함하고 매크로로 정의되어 있는 UnitTest클래스와 TestMethod1 함수가 보인다. 

 

TestMethod1 내부에서 테스트할 프로젝트의 내용을 구현해야하는데, 이를 위해서 보통 외부 프로젝트에 포함된 함수를 사용하려면 헤더 파일 참조와 라이브러리 형태로 링크가 필요하다.

 

C++에서는 라이브러리 프로젝트를 만들지 않는 이상 라이브러리가 따로 생성되지는 않으므로 .obj 개체 파일 링크가 필요하다. (라이브러리 .lib을 빌드하여 라이브러리를 링크해도 된다.)

 

참조 : https://docs.microsoft.com/ko-kr/visualstudio/test/how-to-use-microsoft-test-framework-for-cpp?view=vs-2022

테스트 중인 코드에서 테스트할 함수를 내보내지 않는 경우 .obj 또는 .lib 출력 파일을 테스트 프로젝트의 종속성에 추가할 수 있습니다. 유닛 테스트에 필요한 헤더 및 라이브러리 또는 개체 파일을 포함하도록 테스트 프로젝트의 속성을 수정합니다.

  1. 솔루션 탐색기의 테스트 프로젝트 바로 가기 메뉴에서 속성 을 선택합니다. 프로젝트 속성 창이 열립니다.
  2. 구성 속성 > 링커 > 입력 페이지를 선택한 다음, 추가 종속성 을 선택합니다.
    편집 을 선택하고 .obj 또는 .lib 파일의 이름을 추가합니다. 전체 경로 이름을 사용하지 마세요.
  3. 구성 속성 > 링커 > 일반 페이지를 선택한 다음, 추가 라이브러리 디렉터리 를 선택합니다.
    편집 을 선택하고 .obj 또는 .lib 파일의 디렉터리 경로를 추가합니다. 일반적으로 이 경로는 테스트 중인 프로젝트의 빌드 폴더에 있습니다.
  4. 구성 속성 > VC++ 디렉터리 페이지를 선택하고 포함 디렉터리 를 선택합니다.
    편집 을 선택하고 테스트 중인 프로젝트의 헤더 디렉터리를 추가합니다.

 

메인 프로젝트로 돌아와서 MyClass를 만들었으므로 MyClass.cpp에 대한 MyClass.obj가 생성될 것이고 MyClass 함수를 사용하기 위해 MyClass.h 헤더를 포함시키고 MyClass.obj 링크가 필요하다.

MyClass에 테스트용 함수 하나를 만든다.

메인 프로젝트 속성에서 중간 디렉토리 경로를 UnitTest가 참조하기 편한 경로로 만든다.

메인 프로젝트를 빌드하면 MyClass.cpp에 대한 MyClass.obj 개체 파일이 만들어진다.

 

헤더 파일 포함과 개체 파일 링크

 

1. 헤더 파일 포함

  • VC++ 디렉터리 -> 포함 디렉터리

단위 테스트 프로젝트 속성에서 헤더 파일이 포함된 경로를 포함시킨다.

2. 개체 파일 링크

  • 링커 -> 일반 -> 추가 라이브러리 디렉터리


개체 파일을 링크하도록 메인 프로젝트에서 생성되는 .obj 파일들이 있는 폴더 경로를 추가 라이브러리 디렉토리로 설정한다. 추가로 받은 라이브러리 ex) cryptopp를 추가하였다면 해당 라이브러리 폴더 경로도 추가한다.

  • 링커 -> 입력 -> 추가 종속성

메인 프로젝트에서 모든 .cpp에 의해 생성된 개체 파일 및 정적/동적 라이브러리들을 추가한다. 이는 유닛 테스트 프로젝트에서 참조하기 위해서 필요하다.

단위 테스트 작성

MyClass.h 헤더를 포함시키고 단위 테스트를 작성해본다.

비주얼 스튜디오 창에서 테스트 -> 테스트 탐색기를 클릭하면 단위 테스트를 쉽게 실행할 수 있는 창이 나온다.

추가 테스트를 하고 싶다면 TEST_METHOD매크로로 감싼 함수를 추가로 정의하면 된다.

 

TestCleanup/TestInitialize를 이용해서 모든 테스트 이전에 초기화하고 싶은 내용을 넣거나 종료 이후에 넣고 싶은 내용을 추가할 수도 있다.

 

'개발 > 개발 노트' 카테고리의 다른 글

VirtualBox에서 인터넷 사이트 DNS 접속 오류  (0) 2022.05.08
REST API  (0) 2022.04.30
x64 아키텍쳐 레지스터  (0) 2022.04.21
Base64 변환 인코딩  (0) 2022.04.05