Google Test Macro 정리

YB Lee·2023년 7월 8일
0

googletest

목록 보기
3/4

TEST() vs TEST_F()

  • TEST() 는 전역 함수 또는 간단한 클래스들에대한 unit tests를 작성시 사용
  • TEST_F() 는 Test Fixture 의 줄임말
    여러 테스트에서 같은 구성의 Data Set 사용하고자 할 때 유용 → 같은 구성을 재사용
    객체 형태로 설정하여 테스트 가능
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 생성 → SetUp() → {테스트 수행} → TearDown() → 소멸자
  • 특정 테스트 함수에서 Fixture 내부 원소를 변경하더라도 다른 테스트에 영향을 미치지 않음 → 여러 테스트에서 같은 구성의 Data Set 재사용 가능

ASSERT* vs EXPECT*

  • ASSERT_* : 테스트 실패시 치명적인 실패(fatal failures)를 발생시키고, 현재 함수를 종료시킴
  • EXPECT_* : 테스트 실패시 치명적이지 않은 실패(nonfatal failures)를 발생시키고, 현재 함수를 종료시키지 않음

기본 Assertions

Fatal assertionNonfatal assertionVerifies
ASSERT_TRUE(condition);EXPECT_TRUE(condition);condition is true
ASSERT_FALSE(condition);EXPECT_FALSE(condition);condition is false

이진비교

Fatal assertionNonfatal assertionVerifies
ASSERT_EQ(expected, actual);EXPECT_EQ(expected, actual);expected == actual
ASSERT_NE(val1, val2);EXPECT_NE(val1, val2);val1 != val2
ASSERT_LT(val1, val2);EXPECT_LT(val1, val2);val1 < val2
ASSERT_LE(val1, val2);EXPECT_LE(val1, val2);val1 <= val2
ASSERT_GT(val1, val2);EXPECT_GT(val1, val2);val1 > val2
ASSERT_GE(val1, val2);EXPECT_GE(val1, val2);val1 >= val2

문자열 비교

아래의 assertion 들은 두 개의 C 문자열을 비교함. string 객체를 비교하려면 위의 EXPECT_EQ, EXPECT 등의 assertion 을 사용할 것

Fatal assertionNonfatal assertionVerifies
ASSERT_STREQ(expected_str, actual_str);EXPECT_STREQ(expected_str, actual_str);the two C strings have the same content
ASSERT_STRNE(str1, str2);EXPECT_STRNE(str1, str2);the two C strings have different content
ASSERT_STRCASEEQ(expected_str, actual_str);EXPECT_STRCASEEQ(expected_str, actual_str);the two C strings have the same content, ignoring case
ASSERT_STRCASENE(str1, str2);EXPECT_STRCASENE(str1, str2);the two C strings have different content, ignoring case
profile
Those who have a 'why' to live, can bear with almost any 'how'.

0개의 댓글