1. 도구개요 소개 는 C++ 용 testing Framework 로 Java 의 JUnit 을 C++ 로구현 C++ 언어에서사용할수있도록개발된 Open Source 프로젝트로, source code 의특정 Module 이의도하는방향으로 정확히작동하는지검증할수있도록하는 Unit test Library Framework. 주요기능 C++ 프로그램의 unit testing 카테고리 세부카테고리테스트설계및수행 커버리지 Unit Test (C++) 도구난이도하 라이선스형태 / 비용 Common Public License 1.0 / 무료사전설치도구 C/C++ Compiler 운영체제 Windows, Linux, Mac OS X, UNIX 최신버전 1.12.1 (2012. 10) 특징 다양한 Platform 및지원도구가많다 (Visual Studio, Eclipse 등 ) Source Code 수정없이 Source 가제대로실행되는지간단한설정을통하여쉽게알아낼수있다 적용회사 / 프로젝트 관련도구 Eclipse ( 본매뉴얼기준 ) 제작사 Michael Feathers ( 제작자 ) 공식홈페이지 http://sourceforge.net/projects/cppunit/ 1
2. 기능요약 Source Code 의특정 Module 이의도하는방향으로정확히작동하는지검증할수있도록하는 Unit test Library Framework 주요기능 지원여부 테스트범위 UNIT( 계층, 통합테스트일부지원 ) 테스트정보출력부가기능계층및통합테스트다양한 IDE 지원 XML을기본으로여러형태지원 Test code를위한별도의클래스, macro지원지원 Eclipse, Visual Studio등 1
3. 도구실행환경 C/C++ 을지원하는 IDE 상에서설치및구현이가능 OS 에상관없이설치도구및컴파일러환경 ( 컴파일시 ) 의존적 Eclipse 기준 (4.10) Windows : Windows XP / Windows 7 (32, 64-bit 모두지원 ) Linux : 32, 64-bit 지원 Mac OS X : 32, 64-bit 지원 UNIX : 32, 64-bit 지원 컴파일러, C/C++ 기반도구 (IDE 등 ) 이필요 C/C++ 사용 IDE (Eclipse, Visual Studio 등 ) C/C++ Compiler Windows / Linux / Mac OS / UNIX 1
4. 도구설치방법 세부목차 4.1 다운받기 4.2 설정하기 4.3 Eclipse에 Build 프로젝트생성 4.4 Eclipse에 Build 하기 4.5 Eclipse에 Build 결과 1
4. 도구설치방법 4.1 다운받기 http://sourceforge.net/projects/cppunit/ 에서 을다운받기 받은파일을 C:\ 에압축을푼다 ( 전체경로 : C:\\-1.12.1) 2
4. 도구설치방법 4.2 설정하기 CMD 창에서 MinGW MSYS 명령어를활용하여환경설정 Bash C:\\-1.12.1 폴더에서./configure 3
4. 도구설치방법 4.3 Eclipse 에 Build 프로젝트생성 C++ Library 프로젝트생성 C++ Project Project type 은 Static Library, Project name 은 Build 설정 finish 4
4. 도구설치방법 4.4 Eclipse 에 Build 하기 (1/5) Build 프로젝트에 을 Import (1/2) 마우스우클릭후 Import Import 창의 FileSystem Next 5
4. 도구설치방법 4.4 Eclipse 에 Build 하기 (2/5) Build 프로젝트에 을 Import (2/2) From Directory 에 C:\\-1.12.0\src\ 선택 Build 에 Import Finish 6
4. 도구설치방법 4.4 Eclipse 에 Build 하기 (3/5) Properties 설정하기 프로젝트마우스우클릭 Properties C/C++ build/setting 7
4. 도구설치방법 4.4 Eclipse 에 Build 하기 (4/5) Properties 설정하기 : Include path 를설정 Setting Tool Settings Tab GCC C++ Compiler 의 Include Add 의 Include 폴더 8
4. 도구설치방법 4.4 Eclipse 에 Build 하기 (5/5) Build 의 Build Build 마우스우클릭 Build Project 9
4. 도구설치방법 4.5 Eclipse 에 Build 결과 Build 의 Build 결과물 : Build 프로젝트의 Debug 폴더 Build 마우스우클릭 Build Project 10
5. 도구기능소개 세부목차 5.1 주요특징 / 사용방법개요 5.2 을활용한 Unit Test Code 작성 5.3 을활용한 Unit Test Sample Code 1
5. 도구기능소개 5.1 주요특징 / 사용방법개요 (1/2) C++ Unit test Platform Library 은 C++ 용 testing Framework 로, Michael Feathers 가 Java 의 Junit 을 C++ 로구현 Unit test 의목적 : 프로그램을작은 Unit 단위로나누고각단위가정확하게동작하는지검사하고이를통해문제발생시정확하게어느부분이잘못되었는지확인할수있게함 Refactoring 이후해당 Module 이의도대로동작하고있음을쉽게확인할수있도록도와줌 의주요특징 XML 형태또는다양한 TextFormat 등 test 정보출력지원 IDE 와통합된 Compiler 기반의 Unit test Test Code 를위한 Class 및다양한 macro 의지원 계층별, 통합 test 지원 Recompile 수요를줄여보다빠르고갂편한 Compile 과 test 지원 Eclipse, Visual Studio 등의다양한통합도구지원 2
5. 도구기능소개 5.1 주요특징 / 사용방법개요 (2/2) Library 로, Source 에대한 test source 를별도로제작하여야함 해당기능에대한 test 프로그램을먼저만들고, 실제프로그래밍에적용함으로써 Platform 에서제공하는다양한자동화기능을사용하여 unit test 를할수있다 Library 가제공하는 Class 와, 이를지원하는 Class 를상속받고해당 Method 를 Override 하여 test 프로그래밍을작성 갂단한작성방법 Class TestCase를상속받는 class를만듬 RunTest를 Override 어떤 value를확인하고싶을때 _ASSERT(bool) macro를호출 3
5. 도구기능소개 5.2 을활용한 Unit Test Code 작성 (1/2) Unit test 관련헤더파일추가 #include </extensions/helpermacros.h> #include </extensions/testfactoryregistry.h> #include </ui/text/testrunner.h> Unit test Class의정의 : 예시 ) class CSampleTest : public ::TestFixture TestFixture멤버함수 setup, teardown 구현 setup() : test함수들이수행하기젂에, 호출되는함수 teardown() : test함수들이수행하고난후호출되는함수 Test Code 가들어있는함수등록 예시 )test1, test2, test3 는 testcode 가들어있는함수임 ex> _TEST_SUITE( CSampleTest ); _TEST( test1 ); _TEST( test2 ); _TEST( test3 ); _TEST_SUITE_END(); 4
5. 도구기능소개 5.2 을활용한 Unit Test Code 작성 (2/2) test1, test2, test3함수작성 Test Class를등록 ( macro함수이용 ) 예시 : _TEST_SUITE_REGISTRATION( CSampleTest ); main() Method작성 Build후결과출력확인 5
5. 도구기능소개 5.3 을활용한 Unit Test Sample Code 을활용한샘플코드 ( 예시 ) #include <stdio.h> #include </extensions/helpermacros.h> #include </extensions/testfactoryregistry.h> #include </ui/text/testrunner.h> #include <iostream> class CSampleTest: public ::TestFixture { _TEST_SUITE(CSampleTest ); _TEST( test1 ); _TEST( test2 ); _TEST( test3 ); _TEST_SUITE_END(); }; public : void setup() {} void teardown() {} void test1() {} void test2() {} void test3() {} int main() { ::TextUi::TestRunner runner; ::TestFactoryRegistry ®istry = ::TestFactoryRegistry::getRegistry(); runner.addtest( registry.maketest() ); bool result = runner.run(); return result; } 6
6. 도구활용예제 세부목차 6.1 Sample test 시나리오 6.2 Eclipse 에 Sample 프로젝트작성 6.3 Eclipse 에 Sample 프로젝트 Build 설정 1
6. 도구활용예제 6.1 Sample test 시나리오 Sample test 단순한숫자비교결과를바탕으로하는테스트를아래와같은순서로구현 1. Class TestCase 를상속받는 class를만든다 2. RunTest 를 Override 한다 3. 어떤 Value 를확인하고싶을때 _ASSERT(bool) macro 를호출한다 2
6. 도구활용예제 6.2 Eclipse 에 Sample 프로젝트작성 (1/4) Eclipse CPP Project 를생성 New/C++ Project 선택 SamleTest 이름설정 Finish 3
6. 도구활용예제 6.2 Eclipse 에 Sample 프로젝트작성 (2/4) C++ source 파일을추가 New Source File 소스폴더에 SamleTest, 소스파일에 SamleTest.cpp 설정 Finish 4
6. 도구활용예제 6.2 Eclipse 에 Sample 프로젝트작성 (3/4) 작성할프로젝트코드 5
6. 도구활용예제 6.2 Eclipse 에 Sample 프로젝트작성 (4/4) SamleTest.cpp 에 test code 가구성된모습 6
6. 도구활용예제 6.3 Eclipse 에 Sample 프로젝트 Build 설정 (1/3) SamleTest 프로젝트 Build 설정 : 테스트수행환경설정 SamleTest 프로젝트마우스우클릭 Properties C/C++ Build/Settings Tool Settings Tab 의 GCC C++ Compiler/ Include Include paths 의 Add Include 폴더선택 7
6. 도구활용예제 6.3 Eclipse 에 Sample 프로젝트 Build 설정 (2/3) SamleTest 프로젝트 Build 설정 : 라이브러리 / 폴더설정 Tool Settings Tab 의 MinGW C++ Linker/ Libraries Libraries 의 Add 버튼 Build Library search path 의 Add Build 프로젝트의 Debug 폴더선택 8
6. 도구활용예제 6.3 Eclipse 에 Sample 프로젝트 Build 설정 (3/3) SamleTest 프로젝트 Build 후실행 Build 후아래실행버튼을눌러서 SamleTest test 결과를 Console 창으로확인 9
7. FAQ 질문 1) 는 Eclipse 이외에다른도구에서도설치가가능합니까? 답변 1 : 네. 가능합니다. Visual Studio 에서도설치가가능하도록되어있으며설치또한간편합니다 질문 2) 다른 Unit test 도구에비해서장점은어떤점이있나요? 답변 2 : 많은 Reference 및 Guide 문서또는다양한 Sample Source 가있습니다. 그로인해쉽게적용할수있습니다 1
8. 도구평가 활용성 대부분의 C++ 을지원하는도구에서사용가능 범용성 뛰어난성능과넓은활용범위에의해대부분의도구에기능탑재 호환성 C++ 로인해플러그인형태가아니지만, C++ 가지원되면어디든가능 성능 특별한성능상에문제를일으키지않음 기타 매크로로인해많은유용성보유 JUnit을기반으로개발하였기에, 설치과정을제외하고 JUnit에익숙한사람에게친숙 도구평가의견 에는기존test suite 를확장에사용되는 _TEST_SUB_SUITE macro 가있어서쉽게접근하여추가적인 test 가능 도구출력log를개발자보기편한 Format 으로파일 / 행정보, message test suite 정보등을보여줌 Unit test를하기위해서다소간의작업이필요하나이러한작업을하게될경우차후필요한 debugging 및유지보수비용을절감하는효과를얻음 1
9. 용어정리 본매뉴얼에서사용하고있는용어의정리 Bash Bash (Borune-again shell) 은본셸을대체하는자유소프트웨어로서 GNU 프로젝트를위해브라이언폭스 (Brian Fox) 가작성한유닉스셸을말함. 1989 년발표되어 GNU 운영체제와리눅스, 맥 OS X 그리고다윈등운영체제의기본셸로탑재되어광범위하게배포됨. 또한 DJGPP 와노벨넷웨어에의해도스로이식되었고 Cygwin 과 MinGW 의배포로마이크로소프트윈도로이식됨. Bash 명령어의문법은거의대부분 sh 와호환되어쓰일수있음. Bash 명령어는 ksh, csh 로부터많은아이디어를받아와서명령히스토리, Directory Stack, $RANDOMPOSIX 형식명령어치환등을지원함. 또한입력중에명령어나파일이름을자동완성해주는기능지원함. Override 상위 Class 의 Method 를재정의하는것 단위테스트 Source Code 의특정 Module 이의도된대로정확히작동하는지를초기 Coding 단계에서검증하는절차로, 개발자가모든함수와 Method 에대한 testcase 를작성하여검증하는절차 1