GoogleTest + GoogleMock Manual Build Guide (MinGW)
이 문서는 Windows 환경에서 MinGW (Qt 포함) 및 PowerShell을 이용해 GoogleTest + GoogleMock을 수동으로 빌드하고 테스트 실행하는 방법을 정리한 가이드입니다.
✅ 사전 준비
- MinGW 경로: D:/Qt/Tools/mingw1310_64/bin
- googletest 소스: D:/googletest
- 테스트 소스: D:/test.cpp
1. googletest 빌드 준비
cd D:/googletest
mkdir build
cd build
🔹 PATH에 MinGW 추가
$env:PATH = "D:/Qt/Tools/mingw1310_64/bin;" + $env:PATH
2. CMake로 Makefile 생성
cmake .. -G "MinGW Makefiles" `
-DBUILD_GMOCK=ON `
-DBUILD_GTEST=ON `
-DCMAKE_BUILD_TYPE=Release
✅ 한 줄 명령:
cmake .. -G "MinGW Makefiles" -DBUILD_GMOCK=ON -DBUILD_GTEST=ON -DCMAKE_BUILD_TYPE=Release
3. Make로 GTest/GMock 빌드
mingw32-make -j
4. 테스트 코드 수동 빌드
g++ -std=c++17 -D_POSIX_C_SOURCE=200809L -fno-strict-aliasing -g -o test.exe test.cpp `
-I./googletest/googletest/include `
-I./googletest/googlemock/include `
-L./googletest/build/lib `
-lgmock -lgtest -pthread
✅ 한 줄 명령:
g++ -std=c++17 -D_POSIX_C_SOURCE=200809L -fno-strict-aliasing -g -o test.exe test.cpp -I./googletest/googletest/include -I./googletest/googlemock/include -L./googletest/build/lib -lgmock -lgtest -pthread
5. 테스트 실행
./test.exe
✅ 성공 출력 예시
[ RUN ] MockTest.WorksInCygwin
[INFO] Calling mock.value()...
[INFO] Got result: 42
[ OK ] MockTest.WorksInCygwin (0 ms)
[ PASSED ] 1 test.
🔚 요약
단계 명령 요약
| CMake | cmake .. -G "MinGW Makefiles" ... |
| 빌드 | mingw32-make -j |
| 테스트 빌드 | g++ ... -lgmock -lgtest |
| 실행 | ./test.exe |
🔄 다음 단계 (선택 사항)
✅ 자동화 옵션
- build.bat 스크립트를 만들어 수동 빌드를 자동화할 수 있습니다.
- VSCode의 tasks.json에 등록하여 Ctrl+Shift+B로 빌드 가능
- launch.json으로 디버깅 연동 가능
✅ 다중 테스트 파일 지원
- 여러 .cpp 테스트 파일을 하나로 컴파일하여 통합 테스트 가능
- 예: g++ main.cpp test_math.cpp test_io.cpp ...
✅ 라이브러리 설치 없이 사용
- libgmock.a, libgtest.a를 프로젝트 내부에 보관하여 별도 설치 없이 사용 가능
🧼 참고 팁
- PowerShell에서 rm -rf 대신:
Remove-Item * -Recurse -Force
- 줄바꿈 없이 붙여넣기 원하면 backtick(`) 없이 한 줄로 입력
📁 build.bat 예시
아래는 수동 입력을 자동화하는 build.bat 예시입니다.
@echo off
setlocal
set MINGW=D:/Qt/Tools/mingw1310_64/bin
set PATH=%MINGW%;%PATH%
cd /d %~dp0\googletest
if not exist build mkdir build
cd build
cmake .. -G "MinGW Makefiles" -DBUILD_GMOCK=ON -DBUILD_GTEST=ON -DCMAKE_BUILD_TYPE=Release
if errorlevel 1 exit /b
mingw32-make -j || exit /b
cd /d %~dp0
%MINGW%/g++.exe -std=c++17 -D_POSIX_C_SOURCE=200809L -fno-strict-aliasing -g -o test.exe test.cpp ^
-I./googletest/googletest/include ^
-I./googletest/googlemock/include ^
-L./googletest/build/lib ^
-lgmock -lgtest -pthread
PS D:\> $env:PATH = "D:/Qt/Tools/mingw1310_64/bin;" + $env:PATH
PS D:\> chcp 65001
Active code page: 65001
PS D:\> g++ -std=c++17 -D_POSIX_C_SOURCE=200809L -fno-strict-aliasing -g -o test.exe test.cpp -I./googletest/googletest/include -I./googletest/googlemock/include -L./googletest/build/lib -lgmock -lgtest -pthread
PS D:\> ./test
[==========] Running 19 tests from 14 test suites.
[----------] Global test environment set-up.
[----------] 1 test from DeathTest
[ RUN ] DeathTest.AbortCausesDeath
[ OK ] DeathTest.AbortCausesDeath (13 ms)
[----------] 1 test from DeathTest (18 ms total)
[----------] 1 test from GeneralAssertions
[ RUN ] GeneralAssertions.TruthChecks
[ OK ] GeneralAssertions.TruthChecks (0 ms)
[----------] 1 test from GeneralAssertions (5 ms total)
[----------] 1 test from ComparisonAssertions
[ RUN ] ComparisonAssertions.IntegerChecks
[ OK ] ComparisonAssertions.IntegerChecks (0 ms)
[----------] 1 test from ComparisonAssertions (4 ms total)
[----------] 1 test from FloatingPoint
[ RUN ] FloatingPoint.FloatAndDouble
[ OK ] FloatingPoint.FloatAndDouble (0 ms)
[----------] 1 test from FloatingPoint (4 ms total)
[----------] 1 test from StringAssertions
[ RUN ] StringAssertions.CStringComparisons
[ OK ] StringAssertions.CStringComparisons (0 ms)
[----------] 1 test from StringAssertions (4 ms total)
[----------] 1 test from ExceptionAssertions
[ RUN ] ExceptionAssertions.ThrowChecks
[ OK ] ExceptionAssertions.ThrowChecks (0 ms)
[----------] 1 test from ExceptionAssertions (4 ms total)
[----------] 3 tests from PredicateAssertions
[ RUN ] PredicateAssertions.PredicateChecks
[ OK ] PredicateAssertions.PredicateChecks (0 ms)
[ RUN ] PredicateAssertions.PredicateFormatChecks
[ OK ] PredicateAssertions.PredicateFormatChecks (0 ms)
[ RUN ] PredicateAssertions.Predicate3
test.cpp:140: Failure
3, 2, 1 => 정렬되지 않음: 3, 2, 1
[ FAILED ] PredicateAssertions.Predicate3 (3 ms)
[----------] 3 tests from PredicateAssertions (17 ms total)
[----------] 1 test from MyFixture
[ RUN ] MyFixture.AddInFixture
[ OK ] MyFixture.AddInFixture (0 ms)
[----------] 1 test from MyFixture (4 ms total)
[----------] 1 test from SkipTest
[ RUN ] SkipTest.SkipExample
test.cpp:175: Skipped
이 테스트는 조건에 따라 건너뜁니다.
[ SKIPPED ] SkipTest.SkipExample (3 ms)
[----------] 1 test from SkipTest (7 ms total)
[----------] 1 test from ScopedTraceExample
[ RUN ] ScopedTraceExample.TraceOnFailure
test.cpp:180: Failure
Expected equality of these values:
1
2
Google Test trace:
test.cpp:179: 디버그: 현재 실패 원인 추적 중
[ FAILED ] ScopedTraceExample.TraceOnFailure (6 ms)
[----------] 1 test from ScopedTraceExample (11 ms total)
[----------] 1 test from FailureCheckTest
[ RUN ] FailureCheckTest.DetectFailureAndSkip
test.cpp:184: Failure
Expected equality of these values:
1
2
실패 발생 감지됨
test.cpp:187: Skipped
실패로 인해 이후 절차 생략
[ FAILED ] FailureCheckTest.DetectFailureAndSkip (6 ms)
[----------] 1 test from FailureCheckTest (11 ms total)
[----------] 2 tests from GMockTest
[ RUN ] GMockTest.ExpectCallSuccess
[ OK ] GMockTest.ExpectCallSuccess (0 ms)
[ RUN ] GMockTest.StrictOrderTest
[ OK ] GMockTest.StrictOrderTest (0 ms)
[----------] 2 tests from GMockTest (8 ms total)
[----------] 1 test from TypeTraitsTest
[ RUN ] TypeTraitsTest.SameTypeCheck
[ OK ] TypeTraitsTest.SameTypeCheck (0 ms)
[----------] 1 test from TypeTraitsTest (4 ms total)
[----------] 3 tests from EvenNumbers/ParamTest
[ RUN ] EvenNumbers/ParamTest.IsEvenParam/0
[ OK ] EvenNumbers/ParamTest.IsEvenParam/0 (0 ms)
[ RUN ] EvenNumbers/ParamTest.IsEvenParam/1
[ OK ] EvenNumbers/ParamTest.IsEvenParam/1 (0 ms)
[ RUN ] EvenNumbers/ParamTest.IsEvenParam/2
[ OK ] EvenNumbers/ParamTest.IsEvenParam/2 (0 ms)
[----------] 3 tests from EvenNumbers/ParamTest (14 ms total)
[----------] Global test environment tear-down
[==========] 19 tests from 14 test suites ran. (190 ms total)
[ PASSED ] 15 tests.
[ SKIPPED ] 1 test, listed below:
[ SKIPPED ] SkipTest.SkipExample
[ FAILED ] 3 tests, listed below:
[ FAILED ] PredicateAssertions.Predicate3
[ FAILED ] ScopedTraceExample.TraceOnFailure
[ FAILED ] FailureCheckTest.DetectFailureAndSkip
3 FAILED TESTS
'TA(Test Automation)' 카테고리의 다른 글
| googleTest + win app driver + vs2022 (0) | 2025.04.18 |
|---|---|
| appium, python, android, 테스트 자동화 (0) | 2025.01.14 |
| googletest VSCODE C/C++ (0) | 2025.01.10 |
| python unittest - assertEqual (0) | 2024.08.26 |