반응형
🎈 Test Fixture 필요성
소수 판정 함수를 구글 테스트 해보았다.
해당 포스팅에서는 각 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 |
댓글