이전포스트

[C++] Xcode에서 UnitTest++로 유닛 테스트하기

freemmer 2010. 12. 17. 10:16
출처 : http://cafe.naver.com/mcbugi/11624
맥부기에서 기룡(zelinde) 님께서 작성하신 팁입니다.

@ 주석
혹시 프로그래머 분들중에 UnitTest++을 모르시는 분이 계시다면 꼭 한번 사용해보시길~
저도 "실용주의 프로그래머"라는 책에서 읽고 난 뒤에 Win32/Linux 프로젝트에서는 항상 사용했었습니다.
어떤 기능을 테스트할 때도 유용하지만 일종의 '사용법'도 되더군요.
Windows, Linux 뿐만아니라 XCode에서 아이폰용 어플을 만들때도 사용했으면 했는데 기룡님께서 좋은 팁을 써주셔서 퍼왔습니다~
모두들 즐플 하시길 바래요~ ^^*

@ 주석2
기룡님께서 http://acornheroes.com/2009/06/unit-testing-and-linking-static-libraries-with-xcode/ 이글을 참고 하신것 같은데요.
기본은 기륭님께서 작성하신 아래의 글대로 하면 되지만 몇가지 수정을 해주셔야 합니다.
  1. UnitTest++의 소스를 추가하시기 전에 UnitTest++의 Src에 있는 "Win32" 와 "tests" 폴더를 삭제해주세요.
  2. main() 함수가 작성된 파일을 *.m에서 *.mm으로 변경해주세요.
  3. 당연한 얘기지만 main()함수가 작성된 *.mm 파일에 "UnitTest++.h" 파일을 include하셔야하구요. return UnitTest::RunAllTests(); 문이 들어가야 합니다. 아래의 코드 처럼요.
  4. 만약에 컴파일 과정에서 Expected '=', ',', ';', 'asm' or '__attribute__' before XXX 과 같은 에러를 뿜는다면, "main()이 있는 파일이 *.mm 인지" 그리고 해당파일의 "file type이 sourcecode.cpp.objcpp  인지" 확인해주세요~
#import 
#include "UnitTest++.h"

TEST(Check_LoadTDD)
{
	CHECK_EQUAL(1,1);
}

int main(int argc, char *argv[])
{
    return UnitTest::RunAllTests();
    // 테스트후 프로그램 을 실행하려면 return만 빼면 되겠죠? ^^;;
	
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}



@ 기흉님의 원본 글 입니다. (문제시 자삭하겠습니다)

XCode에서 UnitTest++ 라이브러리를 사용해서 유닛 테스트 만드는 법을 간단히 요약해 봤습니다. 전 UnitTest++을 계속 사용해와서 이걸 쓰는게 더 편하더군요. :)


1. 최신 버전의 UnitTest++을 다운받습니다.


2. Targets에서 새로운 Target을 만듭니다.
  • Targets > Add > New Target... > Static Library



3. UnitTest++ 의 모든 h, cpp 파일을 추가. Target은 방금 만든 UnitTest++ 로 합니다.





4. 메인 Target의 info에서 UnitTest++ 라이브러리 추가합니다.




5. 유닛 테스트 코드 작성




6. 실행하면 콘솔창에서 다음과 같은 결과 화면을 볼 수 있습니다.


반응형