이글은 iPhone Development Guide from Apple 을 보고 작성되었습니다.
OCUnit에 대한 글은 3부작(Logic Test, Application Test, Test Cases)로 나누어 진행됩니다.
이글에 나오는 Screen shot은 XCode 3.2.2 에서 Capture되었습니다.
저는 프로젝트를 진행할때, Unit 테스트용 코드를 따로 작성하는 편인데,
이제까지는, Build Configuration을 추가하는 형식으로 모듈 테스트 코드를 작성하곤 합니다.
이런식으로 테스트할 Module을 나누어서 했는데, 꽤나 원시적인 방식이라, 소스코드가 지저분해지기도 하고,
뭔가 깔끔하지 못하다는 생각이 많이 들어서,
Target을 나누어, 필요한 Class만 넣어서 Unit Test를 진행하는게 깔끔할것이라는 생각이 문득 들었습니다,
그러다 문득, 아이폰 OS 3.0 이 나왔을때 OCUnit이라는 녀석이 공식적으로 추가 되었다는것을 상기했습니다..
새로 진행하게 된 Project도 있고 하니, 어디 한번 시도 해보는거 나쁘지 않겠죠? ^^
Xcode는 2가지 Type의 Unit Test를 지원합니다.
Logic Test. App상이 아니라 Build Phase에서 Test진행, 말그래도 소프트웨어 Logic ( or algorithm )을 테스트하기 위한 Unit Test
Application Test. App상에 설치되어 Test가 진행됨. iPhone에 있는 Reousrce들을 이용한 모듈에 대한 Test가 가능함.
프로젝트에 OCUnit을 추가하려면, 'SenTestingKit' Framework을 추가 해주어야 합니다.
이 Framework은 /Developer/Library/Framework에 있다. ( Xcode가 Default Path로 설치된 경우 )
곧 알겠지만, Test별로 unit-test-bundle target을 추가 하게 되는데, SenTestingKit Framework의 owrnership을 이들 target으로 변경해주어야 합니다.
그럼 Logic Test를 수행하기 위한 절차를 살펴 보면,
1. 타겟 생성 ( iPhone OS unit-test-bundle type )
2. 생성된 타겟을 active Target으로,
3. TestCase Class 추가.
5. TestCase 작성
6. Build ( = Test )
의 순서로 진행 됩니다.
1. 타겟 생성
Target Group에서 우클릭(or cmd + click)한 후 Add->New Target을 선택합니다.
그리고 Cocoa Touch(iPhone OS) -> Unit Test Bundle을 선택한후, 적당한 이름으로 지정하여 생성합니다.
2. 새로 생성한 Target을 Active Target으로 설정합니다.
3. TestCase Class를 추가합니다.
iPhone OS -> Cocoa Touch Class -> Object-C test case class 를 선택하여, File을 생성합니다.
여기서 주의 할점이, Target Owrnership이 Execute Targe이 아니라, 새로 추가한, Test-bundle target이어야 한다는 점입니다
4. TestCase 작성
자동으로 생성되는 코드를 살펴보면, App. Test,Logic Test에 관한 코드가 둘다 담겨져 있는데,
기본적으로 App Test용으로 Compile되게 되어 있으니, Logic Test용으로 바꿔주어야 합니다.
.h 파일에서
#define USE_APPLICATION_UNIT_TEST 1
으로 되어 있는 부분을 찾아서 1 -> 0 으로 바꿔 주면 Logic Test용 코드가 동작하게 됩니다.
.m 파일에서 testMath()라는 Method가 자동적으로 생성되어 있는데, 1+1 == 2 ? 라는 테스트가 되게 되어 있습니다.
일단 실패 하는 결과를 보는게 우선임으로, 1+1 == 2 를 1+1 == 3 으로 바꿔 봅시다.
5. Build (Test)
Active Target/ Target Owrner ship 등이 제대로 설정되어 있다면, Build(= Test)를 수행하면 아래와 같이 Error가 나타날것입니다.
혹시 Build Success 가 된다면, Active SDK 가 iPhone Simulator 3.0 or later 인지 확인하자. Logic Test는 Simulator일때만 동작합니다.
보신바와 같이, 그리 어렵지 않게 Logic Test를 추가 할수 있고, App 을 실행하지 않아도 되니, 빠르게 결과를 확인할 수 있습니다.
분명 Unit Test를 통한 Test자동화는 개발 프로세스에 효율을 가는데, 가끔 이런 도구에 너무 집착하여 개발 효율을 오히려 저해하는 경우도 꽤나 많습니다.
언제나 그렇듯 도구는 수단이 되어야지 목표가 되어서는 안된다고 생각합니다. ^^