본문 바로가기
까망 동네/TDD

[googletest] 테스트 픽스처(Test Fixture)란?

by 까망 하르방 2022. 4. 12.
반응형

🎈 Test Fixture 필요성

<[예시] TDD 방식으로 개발 해보기>에서

소수 판정 함수를 구글 테스트 해보았다.

 

[예시] TDD 방식으로 개발 해보기

해당 포스팅에서는 TDD 개발 방식으로 [소수 찾기] 알고리즘을 검증해 볼 것이다. 📌 TDD (Test Driven Development) 란? TDD (Test Driven Development)란? 「테스트 주도 개발」로 "테스트가 개발을 이끌어 나..

zoosso.tistory.com

 

 

해당 포스팅에서는 각 TestSuit 마다

각각 다른 Data Set으로 테스트 하였다.

구글테스트 예시

테스트 목적에 따라 Data Set을 다르게 할 때도 있지만

동일한 Data Set으로 여러 테스트할 때도 있다.

 

 


🎈 테스트 픽스처(Test Fixture)란?

• 여러 테스트에서 같은 구성의 Data Set 사용하고자 할 때 유용

     같은 구성을 재사용

• 객체 형태로 설정하여 테스트 가능

• gtest.h에 선언된 ::testing::Test 클래스에서 파생

 

 

 

🎈 Test Fixture 형태

class yourTestFixtureClass: public ::testing::test {
public:
   yourTestFixtureClass( ) {
       …
   }

   ~yourTestFixtureClass( )  {
       …
   }

protected:
   virtual void SetUp( ) override {
       …
   }

   virtual void TearDown( ) override {
       …
   }
};

TEST_F (yourTestFixtureClass, TestName_A) {
   …
}

TEST_F (yourTestFixtureClass, TestName_B) {
   …
}

::testing::Test 클래스 상속

• 상속한 클래스에서 접근 권한자 public 혹은 protected 사용

   → 부모 클래스(Test Fixture) 멤버 접근 필요

 생성자 또는 SetUp()  자원 초기화/할당

• 소멸자 또는 TearDown() ▶ 할당된 자원 해제

   → 소멸자에서 예외처리 X TearDown()에서 예외처리 O

• TEST_F() 매크로 사용

 

 

 

🎈 Test Fixture 예시

#include "pch.h"
#include "iostream"
#include "vector"

using namespace std;

class VectorTest : public ::testing::Test
{
public:
    VectorTest() {
        cout << "생성자 호출..." << endl;
    }
    ~VectorTest() {
        cout << "소멸자 호출..." << endl;
    }

protected:
    virtual void SetUp() override
    {
        cout << "SetUp...." << endl;

        // Push Element
        for (int i = 0; i < 10; ++i)
            list.push_back(i);
    }
    virtual void TearDown() override  
    {
        cout << "TearDown..." << endl;
    }

protected:
    vector<int> list;
};

TEST_F(VectorTest, test_vector_erase)
{
    for (int i = 0; i < 5; ++i)
        list.pop_back();

    EXPECT_EQ(5, list.size());
}

TEST_F(VectorTest, test_vector_element)
{
    EXPECT_EQ(10, list.size());
    for (int i = 0; i < 10; ++i)
        EXPECT_EQ(i, list[i]);
}

실행 결과

TEST_F() 호출 흐름:

  새로운 Test Fixture 생성  SetUp() → {테스트 수행} → TearDown() → 소멸자

• 특정 테스트 함수에서 Fixture 내부 원소를 변경하더라도

  다른 테스트에 영향을 미치지 않는다.

  → 여러 테스트에서 같은 구성의 Data Set 재사용 가능

반응형

'까망 동네 > TDD' 카테고리의 다른 글

[예시] TDD 방식으로 개발 해보기  (0) 2022.04.10
Google Test (gTest) 실행해보기  (0) 2022.04.02

댓글