Intro
안녕하세요. 이번 포스팅에서는 Visual studio2019 C++ 프로젝트에서 Unit test framework 중 하나인 Google test 연동 방법에 대해 포스팅하겠습니다. Google Test는 C++ Unit test에서 많이 쓰이는 framework입니다. 잘만 활용한다면 개발자의 실수를 최소화 할 수 있고 경건한 프로그램을 만들 수 있습니다.
Visual studio2019 google test 연동방법
1) 테스트 프로젝트 생성테스트 할 프로젝트를 생성하고 코드를 작성해줍니다. 간단한 테스만 수행하기 위해 math class에 메서드로 sum과 multiply을 구현 하였습니다.
math.h
class math
{
public:
int math::sum(int a, int b);
int math::multiply(int a, int b);
}
간단하게 sum함수와 multiply함수를 테스트해보겠습니다.
math.c
#include "math.h"
int math::sum(int a, int b)
{
return a + b;
}
int math::multiply(int a, int b)
{
return a * b;
}
(adsbygoogle = window.adsbygoogle || []).push({});
2) lib파일 생성 (구성 형식. exe -> lib 변경)exe파일이 아닌 lib파일로 변경하는 이유는 테스트 할 프로젝트 솔루션의 header만 가져다 쓰기 위해서입니다.
3) Google test 프로젝트 생성
3-1) 새 프로잭트 생성
3-2) Google Test 선택
3-3) 프로젝트 생성
3-4) 프로젝트 생성옵션 선택 (정적 라이브버리(.lib), 동적으로 연결 선택)
3-5) 처음 Google Test 프로젝트 만들었을 때 화면
3-6) 시작 프로잭트 변경. 프로젝트 -> 속성 -> 시작 프로젝트 -> Sample-Test1 변경
3-7) 기본 빌드 결과
4) Test 프로젝트 연동
4-1) 링커 경로 포함 (google test project -> 속성 -> 링커 -> 일반 -> 추가 라이브러리 디렉터리 -> ..\x64\Debug 추가)
4-2) lib파일 추가. 테스트할 프로젝트의 lib파일 추가하기 위한 lib path입니다.링커 -> 입력 -> 추가 종속성 -> 라이브러리 추가 (gtest.lib, gtest_maind.lib, Unit_Test.lib)
gtest.lib와 gtest_maind.lib는 google test에 포함되어 있는 lib입니다. lib path는 개인 마음대로입니다. 저는 따로 만들기 귀찮아서 저 폴더에 넣었습니다.
5) Test case 작성
5-1) test case 작성테스트할 프로젝트의 header을 include 하고 test case를 작성합니다. 결과를 보면 1번 case와 3번 case는 통과하게 하였고, 2번 case와 4번 case는 실패하게 케이스를 작성했습니다. 정상적으로 unit test가 수행됨을 확일 할 수 있습니다.
5-2) 빌드 결과
5-3) 테스크 탐색기 결과 (테스트 -> 테스트 탐색기)
6) 결과물 xml 파일로 만들기
자 이제 마지막입니다. test 한 산출물을 xml 파일로 만들어야 합니다.
6-1) visual studio에서 xml 파일 만들기
속성-> 구성 속성 -> 명령 인수 (--gtest_output=xml:..\x64\Debug\result.xml 입력)
결과
6-2) cmd에서 xml 파일 만들기
xml 파일 만들기는 명령 프롬프트로도 확인이 가능합니다
test실행 파일이 있는 폴더로 이동
Sample-Test 1.exe --gtest_output=xml:result2.xml 커맨드 입력
결과가 똑같이 만들어짐을 확일 할 수 있습니다. 보통 기업에서는 xml파일을 가공해서 산출물을 관리하기도 합니다. git에서 찾아보면 xml을 html코드로 바꾸는 방법이 많이 나와있습니다. 그쪽 참조해보시면 될 것 같습니다.
마무리
이번 포스팅에서는 visual studio 2019에서 Google Unit Test 하는 방법에 대해 알아 보았습니다. Unit test는 실제 개발자의 실수를 줄여줄 수 있는 방법입니다. 그리고 개인적으로 배포 전 꼭 거쳐야 하는 과정이라고 생각합니다.
그럼 이만 포스팅을 마치겠습니다.
감사합니다.
'[C/C++/MFC]' 카테고리의 다른 글
시리얼 통신(Serial Communication) C++ (0) | 2023.07.19 |
---|---|
[C++ 캡슐화] (0) | 2021.07.04 |
[C++ 다형성, 오버로드 vs 오버라이드] (0) | 2021.05.23 |
[C++ 객체 지향 프로그래밍 특징(상속, 캡슐화, 다형성] (0) | 2021.05.09 |
[C++ 절차지향 프로그래밍 vs 객체지향 프로그래밍] (0) | 2021.05.08 |