Xcode4 단위 테스트 프레임웍(OCUnit Test Framework) 사용하기

Apple 개발자 도구인 Xcode는단위 테스트를 위한 OCUnit Framework를 포함한다. 테스트 주도 개발(Test-Driven Development)로 iOS 앱 개발시 필요한 OCUnit 사용법에 대해 알아보자. (본인의 Xcode 버전:  4.4.1)

OCUnit 사용 세팅

OCUnit 설정 방법은 기본적으로 두 가지다.

  1. 프로젝트 생성과 함께 단위 테스트 사용 옵션 선택
  2. 기존 프로젝트에 단위 테스트 타겟 추가

1. 프로젝트 생성과 함께 단위 테스트 사용 옵션 선택

< 프로젝트 생성시 단위 테스트 사용 옵션 설정 >

2. 기존 프로젝트에 단위 테스트 타겟 추가

Project Navigator 의 첫번째 항목인 프로젝트 이름을 클릭하면 아래와 같이 Project Editor 가 나타난다. Add Target 을 클릭하자.

Cocoa Touch Unit Testing Bundle 을 선택하고 Next로 이동한다.

테스트 타겟 설정 화면이다. Product Name은 보통 테스트 대상 앱 프로젝트 이름 끝에 “Tests” 를 붙여 설정한다. Project 설정 콤보박스에는 테스트 대상 프로젝트를 설정한다.

1번과 2번 방법으로 OCUnit 설정을 완료하면 테스트 타겟 파일들이 프로젝트에 추가된다. 설정 후 곧바로 테스트를 실행하면 (단축키 : Command + U ) 자동 생성된 테스트 코드가 발생시키는 테스트 실패 메시지가 나타난다. 아래 그림과 같다.

2번 방법으로 설정한 경우, 테스트를 실행해도 실패 메시지가 나타나지 않을 수 있다. 아래의 단계를 따라가며 설정 상태를 확인하자. 설정이 되어 있지 않다면 설정을 추가한다.

Xcode 메뉴바 -> Product -> Edit Scheme 을 선택 (아래 화면)하여 Build 섹션의 (+) 버튼으로 테스트 타겟을 추가하고 “Test” 체크박스를 체크한다.

Test 섹션의 (+) 버튼을 이용하여 테스트 타겟을 추가한다. 아래 그림과 같다.

(1)번 방법을 이용하면 추가로 설명한 단계들이 자동으로 설정된다. 다시 테스트를 실행하면 테스트 실패 메시지를 확인할 수 있다.

여기서 잠깐 한가지 확인하자.

단위 테스트 도구를 이용하여 SW 개발을 하면, 테스트 메소드 개수가 증가하기 마련이다. 매번 모든 테스트 케이스를 확인하는 것이 TDD의 핵심이지만, 상황에 따라 특정 메소드만 테스트 할 경우도 있다. 메소드 선택 체크박스 (위 그림 참조)를 통해 테스트 대상 메소드 선택이 가능하다.

위 그림은 “testExample” 메소드 하나만 선택되어 있음을 보여준다. “testExample”은 OCUnit 설정시에 자동 생성된 메소드로 무조건 테스트가 실패하는 조건을 갖는다. 설정 후 테스트의 결과가 실패인 이유다.

OCUnit 테스트 모드

OCUnit 테스트에는 두 가지 모드가 있다.

  • Logic Unit Tests : 로직 전용 테스트 모드. iOS Simulator 모드에서만 가능.
  • Application Unit Tests : 어플리케이션 테스트 모드. 실제 디바이스에서도 테스트 가능.

(1) 방법으로 OCUnit 설정을 하면 디폴트로 Application Unit Tests 모드다. (2)방법으로 설정하면 Logic Unit Tests 모드가 기본으로 선택된다.

Project Editor 화면에서, 테스트 타겟의 Build Settings 속성(“Bundle Loader”, “Test Host”) 설정을 통해 테스트 모드 변경이 가능하다. Build Settings의 검색을 이용하자.

Bundle Loader 와 Test Host의 설정값을 지우면 Logic Unit Tests 모드다. Logic Unit Tests는 반드시 iOS Simulator 만 지원함을 기억하자.

Bundle Loader 와 Test Host 에 아래 값을 설정하면  Application Unit Tests 모드다.

  • iOS : $(BUILT_PRODUCTS_DIR)/<app_name>.app/<app_name>
  • Mac : $(BUILT_PRODUCTS_DIR)/<app_name>.app/Contents/MacOS/<app_name>

아래 그림은 설정 예시다. 위의 값에서 <app_name>을 테스트 대상 프로젝트 이름으로 바꾸어 입력한다. Test Host 설정값은 Bundle Loader 과 동일하다.

OCUnit 사용

테스트 코드와 어플리케이션 코드는 분리되어야 한다. 테스트 목적으로 새로운 클래스를 추가할 경우 설정 방법을 알아보자.

테스트 타겟에 클래스 – 보통 테스트 메소드를 포함하는 클래스 – 를 추가할 경우, 아래 그림처럼 Targets 옵션에 테스트 타겟만 설정한다.

그러나 어플리케이션 코드에 클래스 – 테스트 대상 클래스 – 를 추가할 경우, 타겟 옵션에 테스트 타겟과 어플리케이션 타겟을 같이 선택해야 테스트 코드와 어플리케이션 코드 양 쪽에서 사용 가능하다.

테스트 케이스 메소드 사용법은 Writing Test Case Methods 을, 사용에 필요한 OCUnit  API 정보는 Unit-Test Result Macro Reference 를 참고하자. (나중에 별도 포스팅으로 다룰 생각이다.)

테스트 케이스 메소드 작성 방법은 어렵지 않다. 중요한 것은 제품 개발에 의미있는 테스트 케이스를 발굴하는 것이다.

* Reference

Advertisements
Leave a comment

2 Comments

  1. TDD (Test-Driven Development) | GTyga
  2. TDD (Test-Driven Development) – Trust me, I'm an engineer.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: