GTest
[GTest] Fixture 예제
2025. 1. 8. 11:37반응형
// StackTest.cpp
#include <gtest/gtest.h>
#include "Stack.h"
#include <string>
// 1) Test Fixture 클래스 정의
class StackTest : public ::testing::Test {
protected:
// protected 영역에 멤버 변수를 선언하고,
// SetUp()에서 초기화하는 패턴이 일반적입니다.
// 테스트 대상인 스택 객체 2개
Stack<int> intStack;
Stack<std::string> stringStack;
// 모든 테스트가 시작하기 전 한 번만 실행 (선택 사항)
// GTest 최신 버전에서는 SetUpTestSuite() 사용 권장
static void SetUpTestCase() {
// 예: 전역 리소스 초기화 등
}
// 모든 테스트가 끝난 후 한 번만 실행 (선택 사항)
// GTest 최신 버전에서는 TearDownTestSuite() 사용 권장
static void TearDownTestCase() {
// 예: 전역 리소스 해제 등
}
// 각 테스트 케이스(메서드) 실행 전마다 호출
void SetUp() override {
// 테스트마다 초기 상태를 보장하기 위해
// 스택에 몇 개의 데이터를 넣어두는 등 사전작업 가능
intStack.Push(1);
intStack.Push(2);
intStack.Push(3);
stringStack.Push("Hello");
stringStack.Push("World");
}
// 각 테스트 케이스(메서드) 실행 후마다 호출
void TearDown() override {
// 사용한 리소스를 해제하거나 정리하는 로직을 여기에 둘 수 있음.
}
};
// 2) Test Fixture를 사용하는 테스트 사례들
TEST_F(StackTest, IntStack_PushAndTopTest) {
// 이미 SetUp()에서 1, 2, 3이 들어간 상태
EXPECT_EQ(intStack.Size(), 3U);
EXPECT_EQ(intStack.Top(), 3); // 가장 최근에 푸시된 값
intStack.Push(99);
EXPECT_EQ(intStack.Top(), 99);
EXPECT_EQ(intStack.Size(), 4U);
}
TEST_F(StackTest, IntStack_PopTest) {
// 초기 상태: [1, 2, 3]
intStack.Pop(); // 3 제거
EXPECT_EQ(intStack.Top(), 2);
EXPECT_EQ(intStack.Size(), 2U);
intStack.Pop(); // 2 제거
EXPECT_EQ(intStack.Top(), 1);
EXPECT_EQ(intStack.Size(), 1U);
// 더 이상 Pop()해도 예외가 발생하지 않는지,
// 혹은 예외가 발생해야 하는지 등을 테스트
intStack.Pop(); // 1 제거
EXPECT_TRUE(intStack.Empty());
EXPECT_THROW(intStack.Pop(), std::out_of_range); // 비어있으므로 예외
}
TEST_F(StackTest, StringStack_Test) {
// 초기 상태: ["Hello", "World"]
EXPECT_EQ(stringStack.Top(), "World");
EXPECT_EQ(stringStack.Size(), 2U);
stringStack.Pop();
EXPECT_EQ(stringStack.Top(), "Hello");
EXPECT_EQ(stringStack.Size(), 1U);
// 비었을 때 예외 테스트
stringStack.Pop();
EXPECT_TRUE(stringStack.Empty());
EXPECT_THROW(stringStack.Top(), std::out_of_range);
}
반응형
'GTest' 카테고리의 다른 글
[GTest] (2) Example (0) | 2025.01.09 |
---|---|
[GTest] (1) Example (0) | 2025.01.09 |
[Unit Test] libgtest-dev 다운로드하고 수동으로 Makefile에 적용하기 (0) | 2024.11.22 |
[Unit Test] libgtest-dev 지우기 (0) | 2024.11.22 |
Makefile로 C++ 파일을 Gtest와 Gcov를 이용해서 커버리지 리포트 산출하기 (0) | 2024.11.21 |