Unit Test 연동
- Logic Test 설정방법
- Xcode에서 Project > New Target메뉴나 Groups & files의 Targets그룹에서 마우스 오른쪽 버튼을 클릭하여 Add> New Target으로 새로운 Target Bundle을 생성함.
- New Target 템플릿 윈도우에서 Cocoa Touch > Unit Test Bundle을 선택한 후 Next 버튼 클릭함.
- Target Bundle명을 넣고 finish를 클릭하여 Group and Files의 Targets그룹에 새로 추가된 Target Bundle을 확인함.
- Application Test 설정방법
- Xcode에서 Group & files의 Targets그룹에 현재 생성된 Target Application을 선택한 후 마우스 오른쪽 버튼을 클릭하여 Duplicate를 선택한 후 새로운 Target Application을 생성함.
- Application Test는 실제 실행을 위한 Executable Target이 필요함. Duplicate 기능을 이용하면 기존의 프로그램 설정을 그대로 적용하여 실행할 수 있는 Executable Target을 생성할 수 있음.
- 새로 생성된 Target Application 명 규칙은 <Application_name> + Testing의 형태로 설정함. Target Application 명은 자유롭게 설정이 가능하나 마지막에(suffix) 반드시 Testing을 포함시켜야 함. ex) ApplicationTesting
- Xcode에서 Project > New Target메뉴나 Groups & files의 Targets그룹에서 마우스 오른쪽 버튼을 클릭하여 Add > New Target으로 새로운 Target Bundle을 생성함.
- New Target 템플릿 윈도우에서 Cocoa Touch > Unit Test Bundle을 선택한 후 Next 버튼 클릭함.
- Target Bundle명을 넣고 finish를 클릭하여 Group and Files의 Targets그룹에 새로 추가된 Target Bundle을 확인함.
- 새로 생성되는 Target Bundle명 규칙은 <Application_name> + Tests의 형태로 설정함. 이름은 자유롭게 설정이 가능하나 마지막에는(suffix) 반드시 Tests을 포함시켜야 함. ex) ApplicationTests
- TestCase Class생성방법
- Group and Files 목록에 그룹을 추가하기 위해서 프로젝트 명에서 마우스의 오른쪽을 클릭하여 Add > New Group 메뉴를 선택하고 Test 클래스가 있을 Group을 생성하고 Group 명을 설정함. Group명은 특별한 규칙이 없이 자유롭게 작성이 가능함.
- 새로 생성한 Group에 마우스 오른쪽 버튼을 클릭하여 Add > New File을 실행하면 New File 템플릿 윈도우에서 Objective-C test case class형식의 파일을 선택 후 Next 버튼을 클릭함.
- 생성할 Test case의 파일 명과 파일 명 바로 아래에 있는 Also create XXX.h 옵션도 함께 선택함. 이때 Targets은 Executable Target이 아닌 Target Bundle (ApplicationTests)만 선택한 후 Finish 버튼을 클릭함.
- 생성한 Test class Group에 새로 생성된 Test Case Class 코드가 추가된 것을 확인할 수 있음.
- Target Dependency 설정
- Target 그룹의 Target Bundle (ApplicationTests)을 더블 클릭한 후 Target Info 윈도우에서 General 탭을 선택함.
- Direct Dependencies의 ‘+’ 버튼을 클릭하여 원 Application Target 'OCT'을 선택하여 추가함
- Target 그룹의 Target Application (ApplicationTesting)을 더블 클릭한 후 Target Info 윈도우에서 General 탭을 선택함.
- Direct Dependencies의 ‘+’ 버튼을 클릭하여 Target Bundle 'ApplicationTests'을 선택하여 추가함
- Products 폴더에서 생성된 Target Bundle 이름의 octest파일(ApplicationTests.octest)을 Target Application(ApplicationTesting)> Copy Bundle Resource로 dragging하여 Copy시켜 생성함.
<Products 폴더에 octest 파일이 빨강색인 경우> |
- Xcode 좌측 상단에 있는 설정버튼을 클릭하여 Active Target을 Target Application (ApplicationTesting)으로 선택함.
- Active Executable 은 Target Application(ApplicationTesting – iPhone Simulator3.1.3)선택함.
- Build 환경 설정 및 Unit Test결과확인
- Group&files에서 Project와 Target을 더블클릭하면 빌드설정 창이 나타나고, BaseSDK 설정을 Device 모드로 변경함.
- UnitTest 코드가 생성되면 소스코드 안에 LigicTest와 ApplicationTest를 수행할 수 있는 샘플 테스트코드가 기본적으로 제공됨. 실제 새로운 테스트코드를 작성할 경우 이 샘플코드는 지우고 사용함.
- 샘플코드의 헤더파일에서 정의된 USE_APPLICATION_UNIT_TEST 값을 '1'로 설정하면 testAppDelegate함수가 호출되면서 ApplicationTest 방식의 테스트가 수행됨.
- USE_APPLICATION_UNIT_TEST 값을 '0'으로 설정하면 testMath 함수를 호출되며 LogicTest 방식의 테스트가 수행됨.
- Device가 연결되지 않은 경우에는 USE_APPLICATION_UNIT_TEST 값 설정을 '0'으로 변경하고 Simulator로 logicTest를 수행하고 결과를 확인할 수 있음.
|
-
설정을 모두 마치고 Xcode에서 Build > Build를 수행하여 결과를 확인함.
- Xcode에서는 Build 시 Unit Test 결과를 Xcode 하단에 함께 표시하고 있음.
Test 성공 시 ‘Succeeded’라는 메시지가 표시되고 Test 실패 시 ‘Failed’라는 메시지가 표시됨.
- 표시된 결과 메시지를 클릭하여 Unit Test의 수행된 총 테스트 케이스와 어떤 테스트 케이스에서 성공 및 실패 여부, 테스트케이스 소요시간 등의 상세정보를 확인함.
- Unit Test 결과의 CI 연동
- OCUnit 결과를 JUnit 형태의 xml파일로 변경시켜주는 ocunit2junit.rb 파일을 /usr/bin/ 디렉터리에 추가함
- xcodebuild clean 명령어를 설정하고 Target은 LogicTest Target Bundle 명으로 설정함.
xcodebuild clean -target "LogicTest Target bundle 명” -configuration Debug
- Target 대상 프로젝트를 수행시키는 xcodebuild 명령어 설정함.
xcodebuild -target "LogicTests" -configuration Debug
-sdk /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk/
- Hudson CI Build의 Execute Shell에서 xcode build설정 다음에 | /usr/bin/ocunit2junit.rb 으로 설정함.
ocunit2junit.rb는 OCunit의 결과파일을 JUnit 형태의 xml 파일로 변경하여 Hudson CI의 JUnit Plug- in을 통해 설정할 수 있는 스크립트 파일임.
- Hudson CI의 Publish JUnit test result report을 선택하고 test-reports/*.xml 로 설정함.
- Build Now를 실행하면 해당 Unit Test 결과 그래프를 확인함.
'iOS' 카테고리의 다른 글
메모리릭 현상(1) (0) | 2011.01.31 |
---|---|
Custom UINavigationController (0) | 2011.01.24 |
NSOperation (0) | 2011.01.11 |
NSOperationQueue (0) | 2011.01.10 |
NSNotificationCenter (0) | 2011.01.05 |