픽스처와 설정
테스트 설정 공유하기
픽스처와 설정은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
테스트 간 설정 공유
여러 테스트에 같은 객체가 필요할 때는 픽스처를 사용하여 해당 설정을 한 번만 정의할 수 있습니다. 픽스처는 ::testing::Test를 상속하는 클래스입니다.
픽스처 정의
픽스처를 사용하는 각 테스트에서는 픽스처의 멤버에 접근할 수 있습니다. SetUp()은 모든 테스트 전에 실행되고 TearDown()은 이후에 실행됩니다.
#include <gtest/gtest.h>
#include <vector>
class VectorTest : public ::testing::Test {
protected:
std::vector<int> v;
void SetUp() override { v = {1, 2, 3}; }
};TEST_F 사용하기
픽스처를 사용하는 테스트는 첫 번째 인수로 픽스처 클래스 이름을 전달하는 TEST_F로 작성합니다.
#include <gtest/gtest.h>
#include <vector>
class VectorTest : public ::testing::Test {
protected:
std::vector<int> v{1, 2, 3};
};
TEST_F(VectorTest, HasThree) {
EXPECT_EQ(v.size(), 3u);
}
TEST_F(VectorTest, FirstIsOne) {
EXPECT_EQ(v.front(), 1);
}테스트마다 새 인스턴스
GTest는 모든 테스트마다 새 픽스처 객체를 생성합니다. 테스트는 변경 가능한 상태를 절대 공유하지 않으므로 서로 독립적이며 실행 순서도 중요하지 않습니다.
SetUp과 생성자 비교
생성자 또는 SetUp()에서 멤버를 초기화할 수 있습니다. 초기화 과정에서 예외가 발생할 수 있거나 가상 메서드를 안전하게 호출하려는 경우에는 SetUp()을 사용하세요.
#include <gtest/gtest.h>
class Resource : public ::testing::Test {
protected:
int* data = nullptr;
void SetUp() override { data = new int(10); }
void TearDown() override { delete data; }
};
TEST_F(Resource, HasTen) {
EXPECT_EQ(*data, 10);
}정리를 위한 TearDown
TearDown()은 SetUp()에서 확보한 리소스를 해제합니다. RAII 멤버를 사용하면 소멸자가 이 작업을 자동으로 처리하는 경우가 많으므로 TearDown()이 전혀 필요하지 않을 수도 있습니다.
테스트 스위트 수준 설정
비용이 큰 공유 리소스에는 정적 SetUpTestSuite()과 TearDownTestSuite()을 사용하세요. 이 함수들은 테스트마다가 아니라 스위트마다 한 번 실행됩니다.
#include <gtest/gtest.h>
class DbTest : public ::testing::Test {
protected:
static void SetUpTestSuite() { /* open shared connection */ }
static void TearDownTestSuite() { /* close it */ }
};테스트별 설정과 스위트별 설정
신중하게 선택하세요.
SetUp/TearDown: 테스트마다 실행되며 격리되고 안전합니다SetUpTestSuite/TearDownTestSuite: 스위트마다 실행되며 공유되므로 더 빠르지만 테스트끼리 간섭할 수 있습니다
도우미 메서드
픽스처에 여러 테스트에서 사용하는 도우미 메서드를 포함하면 각 테스트가 어설션에 집중할 수 있습니다.
#include <gtest/gtest.h>
#include <string>
class ParserTest : public ::testing::Test {
protected:
int parse(const std::string& s) { return std::stoi(s); }
};
TEST_F(ParserTest, ParsesNumber) {
EXPECT_EQ(parse("42"), 42);
}전역 환경
프로세스 전체의 설정(모든 테스트 전에 한 번 실행)이 필요하다면 AddGlobalTestEnvironment를 통해 ::testing::Environment를 등록하세요. 로그 기록이나 프레임워크 초기화에 유용합니다.
테스트 독립성 유지
각 TEST_F가 새 픽스처를 받으므로 다른 테스트의 부수 효과에 의존하지 마세요. 독립성을 유지하면 실패 원인을 쉽게 진단할 수 있고 테스트를 안전하게 병렬화할 수 있습니다.
빠른 확인
픽스처의 수명 주기를 떠올려 보세요.
복습
픽스처를 배웠습니다.
::testing::Test를 상속하고TEST_F를 사용합니다SetUp/TearDown은 테스트마다 실행되며 매번 새 객체가 생성됩니다- 공유되고 스위트마다 한 번만 필요한 리소스에는
SetUpTestSuite을 사용합니다 - 도우미와 전역 환경은 규모가 큰 스위트에 도움이 됩니다
자주 묻는 질문
“픽스처와 설정” 강의는 무료인가요?
네 — “픽스처와 설정” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“픽스처와 설정”에서 뭘 배우나요?
테스트 설정 공유하기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“픽스처와 설정” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- GTest 설정하기
- 검증과 매처
- 픽스처와 설정
- GMock으로 모킹하기