#title C++/GoogleTest(gtest) SetUp TearDown 계층 구조 #keywords C++, GoogleTest, 단위 테스트 GoogleTest에는 3가지 레벨의 SetUp/TearDown이 있다. 1. Global (Environment) {{{#!vim cpp class MyEnv : public ::testing::Environment { void SetUp() override { /* 전체 프로세스에서 1번 */ } void TearDown() override { /* 전체 프로세스에서 1번 */ } }; // main에서 등록 ::testing::AddGlobalTestEnvironment(new MyEnv()); }}} 2. Test Suite (Fixture 단위) {{{#!vim cpp class MyFixture : public ::testing::Test { static void SetUpTestSuite() { /* 해당 Fixture의 첫 테스트 전 1번 */ } static void TearDownTestSuite() { /* 해당 Fixture의 마지막 테스트 후 1번 */ } }; }}} 3. Test Case (개별 테스트) {{{#!vim cpp class MyFixture : public ::testing::Test { void SetUp() override { /* 매 TEST_F 실행 전 */ } void TearDown() override { /* 매 TEST_F 실행 후 */ } }; }}} 실행 순서 {{{#!vim sh Environment::SetUp() ← 1번 (프로세스) SetUpTestSuite() ← 1번 (Fixture A) SetUp() ← 매번 (Test A-1) TearDown() SetUp() ← 매번 (Test A-2) TearDown() TearDownTestSuite() SetUpTestSuite() ← 1번 (Fixture B) SetUp() ← 매번 (Test B-1) TearDown() TearDownTestSuite() Environment::TearDown() ← 1번 (프로세스) }}} * constructor/destructor 대신 SetUp/TearDown 계층 구조 패턴을 쓰는 이유 constructor vs. SetUp 실패 가능성이 있는 초기화 → SetUp (이유: 예외 안전성) destructor vs. TearDown 자원 해제 → TearDown (부모 호출 보장) (이유: 상속 시 순서 보장) ---- CategoryDocument