GoogleTest: 실수하기 쉬운 GTest 코드 패턴
GoogleTest: 실수하기 쉬운 GTest 코드 패턴
🔁 테스트 코드 리팩토링: 실수하기 쉬운 GTest 코드 패턴
⚠️ 문제 1: 테스트 중복 코드
여러 테스트 함수에 같은 초기화 코드가 반복된다면 Test Fixture를 활용해 중복 제거하세요.
🔴 나쁜 예:
1
2
3
4
5
6
7
8
9
TEST(MyTest, Case1) {
std::vector<int> v = {1, 2, 3};
EXPECT_EQ(v.size(), 3);
}
TEST(MyTest, Case2) {
std::vector<int> v = {1, 2, 3};
EXPECT_EQ(v[1], 2);
}
✅ 좋은 예:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MyFixture : public ::testing::Test {
protected:
void SetUp() override {
v = {1, 2, 3};
}
std::vector<int> v;
};
TEST_F(MyFixture, Case1) {
EXPECT_EQ(v.size(), 3);
}
TEST_F(MyFixture, Case2) {
EXPECT_EQ(v[1], 2);
}
⚠️ 문제 2: 의미 없는 테스트 이름
의도를 알 수 없는 테스트 이름은 유지보수에 방해됩니다.
🔴 나쁜 예: TEST(MyTest, Test1)
✅ 좋은 예:
1
2
3
TEST(StringUtil_ToUpper_WhenLowercase, ShouldReturnUppercase) {
EXPECT_EQ(ToUpper("abc"), "ABC");
}
⚠️ 문제 3: 복잡한 테스트 로직
테스트는 단순하고 명확해야 합니다. 너무 많은 조건을 한 테스트에 넣지 마세요.
🔴 나쁜 예:
1
2
3
4
5
6
7
8
9
TEST(CalculatorTest, ComplexCase) {
Calculator c;
c.Input("1+2");
EXPECT_EQ(c.Result(), 3);
c.Input("5-1");
EXPECT_EQ(c.Result(), 4);
c.Input("2*3");
EXPECT_EQ(c.Result(), 6);
}
✅ 좋은 예:
1
2
3
4
5
6
7
8
9
10
11
TEST(CalculatorTest, Add) {
Calculator c;
c.Input("1+2");
EXPECT_EQ(c.Result(), 3);
}
TEST(CalculatorTest, Subtract) {
Calculator c;
c.Input("5-1");
EXPECT_EQ(c.Result(), 4);
}
This post is licensed under CC BY 4.0 by the author.