10월, 2014의 게시물 표시

Google Test를 이용한 Class의 Private/Protected Member Test

ref : googletest advance guild 예전에는 Private/Protected member를 Test할때 test main에 #ifdef TEST #define private public #define protected public #endif 이런 코드를 삽입하여 Test 하는 개발자를 보았다.. ㅋ 이럴 경우 #define TEST를 삽입하면 Test 대상이 아닌 모든 class의 접근 권한까지 public이 되어 버리는 상황이 발생한다. 뭐.. 구현과 Test code의 컴파일을 분리하면 별 문제는 되지 않겠지만...대세처럼 되어가는 TDD 방법론의 경우 Test code를 작성하면서 main code를 작성하기 때문에 위와 같은 code는 개발자가 의도하지 않은 실수를 유발하기 딱 좋다 ㅋ Google Test는 이러한 상황에서 Test code가 다른 프로그램 까지 영향을 미치지 않도록 하는 좋은 방법을 제공한다. // foo.h #include "gtest/gtest_prod.h" // Defines FRIEND_TEST. class Foo {   ...   private :   FRIEND_TEST ( FooTest , BarReturnsZeroOnNull );   int Bar ( void * x ); }; // foo_test.cc ... TEST ( FooTest , BarReturnsZeroOnNull ) {   Foo foo ;   EXPECT_EQ ( 0 , foo . Bar ( NULL ));   // Uses Foo's private member Bar(). } 깔끔하다.. FRIEND_TEST는 gtest_prod.h에 정의 되어 있는데 코드를 보면 다음과 같다. #define FRIEND_TEST(test_cast_name, test_name)\ friend class test_case_na