Helper Macros

TestRunner 에서 봤듯이 Fixture 에는 Static 함수는 suite() 가
필요합니다. 하지만 이것을 매번 작성하다보면 , 내용이 귀찮고,
반복적으로 해야 하고 그러다 보면 실수를 유발하게 됩니다. 그래서
이부분을 편리한 매크로로 만들어서 쓰게 할 수 있습니다.

기존의 파일에서

#include <cppunit/extensions/HelperMacros.h>

를 추가하면 macro를 쓸 수 있게 해줍니다.

CPPUNIT_TEST_SUITE ( ComplexNumberTest) ;

('' 이것을 선언해주면 suite 를 쓰겠다고 선언하는 것입니다.

suite 에 추가해줄 함수들을 추가하고요

CPPUNIT_TEST (testEquality ) ;
CPPUNIT_TEST (testAddition ) ;


그리고 suite 선언이 끝났다고 선언해주는 것입니다.

CPPUNIT_TEST_SUITE_END () ;


여기까지 차례로 쓰면 , 아래 나와 있는 메서드 전체를 선언 과 구현해준
것입니다.

static CppUnit::TestSuite * suite () ;

나머지 부분들은 기존과 동일하게 처리하시면 됩니다.

complextest.h 를 보기로 하지요

class ComplexNumberTest : public CppUnit::TestFixture  {
 private:
  Complex *m_10_1, *m_1_1, *m_11_2;
 public:

  CPPUNIT_TEST_SUITE( ComplexNumberTest );
  CPPUNIT_TEST( testEquality);
  CPPUNIT_TEST( testAddition);
  CPPUNIT_TEST_SUITE_END();


 public:
  void testDivideByZeroThrows ()
  {

  }
  void setUp()
  {
    m_10_1 = new Complex( 10, 1 );
    m_1_1 = new Complex( 1, 1 );
    m_11_2 = new Complex( 11, 2 );
  }

  void tearDown()
  {
    delete m_10_1;
    delete m_1_1;
    delete m_11_2;
  }

  void testEquality()
  {
    CPPUNIT_ASSERT( *m_10_1 == *m_10_1 );
    CPPUNIT_ASSERT( !(*m_10_1 == *m_11_2) );
  }

  void testAddition()
  {
    CPPUNIT_ASSERT( *m_10_1 + *m_1_1 == *m_11_2 );
  }

};



EXCEPTION 부분은 생략하기로 합니다.


TestFactoryRegistry

TestFactoryRegistry 는 두가지 이유로 씁니다.
 fixture suite 를 테스트 러너에 추가하는 것을 가끔 잊어먹을때가
 있습니다. 다른 파일에 보통 fixuture 가 있기 때문에 종종 그렇게
 잊어먹곤 합니다.

 test case 의 모든 헤더를 한곳에 집중해서 선언하면 컴파일 할때 병목
 현상이 생기기 때문입니다.


다음의 예를 봅시다.

ComplexNumberTest 를 등록 시키기 위해서는 .cpp 파일에 다음과 같이
추가합니다.

CPPUNIT_TEST_SUITE_REGISTRATION ( ComplexNumberTest) ;

이 이면에는 AutoRegisterSuite 의 static 변수가 선언되어 , 생성시에 그
변수가 TestSuiteFactory 를 TestFactoryRegistry 에 등록시킵니다. 그리고
TestSuiteFacctory 가 ComplexNumberTest::suite() 에 의해 반환되는
TestSuite를 반환합니다.

주절 주절 말을 늘어놓아지만 결국 할 이야기는 TestSuite 를 짜고 등록을
시키면 나중에 한꺼번에 몰아서 호출이 가능하다는 이야기 입니다.

실제로 이 테스트를 실행시키려고 하면 우리는 더이상 주저리 주저리
헤더를 등록 시킬 필요 없이

#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TestRunner.h>

Factory 와 TestRunner 만 인클루드 시키면 됩니다.


 
CppUnit::TestFactoryRegistry & registry =
 CppUnit::TestFactoryRegistry::getRegistry();


이렇게 하면 CPPUNIT_TEST_SUITE_REGISTRATION () 를 통해서 등록한 모든
test suite를 가져올수 있습니다.

 
runner.addTest (registry.makeTest () );
 runner.run () ;

 return 0 ;

이렇게 실행합니다. (기존의 코드를 지우고 새로 위의 코드들을 써 넣으십시요)

main 함수가 간단해 지고 , 간결해 지는 장점이 있습니다.


Post build Check 부분은 나중에 따로 다른 예로 설명 드리고 CookBook 은
여기서 마치는 걸로 하겠습니다.

+ Recent posts