코드를 작성하다가.. unittest를 하려고 하다 보니.. 4.0에서는 또 다른 일이네요 -_-;;
적용하다가.. 알게된 gh-unit이라는 라이브러리가 있어서.. 4.0용에서 사용 하는 과정을 정리해 봤습니다.
이게 ui도 잘 되어 있고, 훨씬 좋더라구요 ^^;
시작 하시기 전에 기존 프로젝를 띄우시거나, 빈 프로젝트를 띄어 줍니다.
1. target 추가 하기.
File > New > New Target... 으로 타겟을 추가해 줍니다.
Tests의 Build Phases에서 Link Binary With Libraries에 보시면, 이렇게 4개가 추가되어 있으면 정상적으로 추가 된겁니다.
2. 프레임워크 추가하기
https://github.com/gabriel/gh-unit/downloads
이 주소로 가셔서 최신의
여기서 사용한건 GHUnitIOS-0.4.27.zip 이 파일 입니다.
(0.4.28도 있는데.. 이건 오류가 나서 실행이 안 됩니다.. ^^;;)
다운로드 받은 파일의 압축을 푸시고, 프로젝트 폴더에 복사해서 넣습니다. (프로젝트를 끌어 오는 과정에 copy로 해서 옮겨 오셔도 상관은 없습니다.)
복사한 폴더를 UnitTest를 할 타겟(여기서는 Tests)에 드레그 해서 추가해 줍니다.
혹시 다른 폴더에 있는 프레임워크를 추가하신 분은 "Tests"의 Build Settings에서 'Framework Search Paths'에 해당 폴더를 추가해 주세요.
그리고 "Tests" Build Settings에서 'Other Linker Flags'에
-ObjC
-all_load
혹시, 위 설정이 안 보이시는 분들은 중간에 보시면, Basic이라고 되어 있는 거 옆에 All이라는 버튼이 있습니다. 그걸 누르시면 보일 겁니다.
3. info.plist 변경하기.
각 프로젝트 마다.. 프로젝트-Info.plist 파일이 있을 겁니다.여기서는 Tests-Info.plist인데.. 여기서 Main nib file base name에
MainWindow라고 있을 겁니다.
이 필드를 지워 줍니다.
4.Unit Test 코드 넣기.
Tests의 밑에 보시면 main.m이라는 파일이 있습니다.
이 파일의 내용을 모두 지우고, 아래와 내용을 붙여 넣기 합니다.
원본은 좀 긴데.. 블로그에 쓰기 길어서 주석을 좀 제외 했습니다.
원본 : https://github.com/gabriel/gh-unit/blob/master/Project-IPhone/GHUnitIOSTestMain.m
#import <UIKit/UIKit.h>main.m이 2개 있어서 찝찝하신 분은 main.m을 지우고, 원본 파일을 사용하셔도 괜찮습니다.
#import <GHUnit/GHUnit.h>
void exceptionHandler(NSException *exception) {
NSLog(@"%@\n%@", [exception reason], GHUStackTraceFromException(exception));
}
int main(int argc, char *argv[]) {
NSSetUncaughtExceptionHandler(&exceptionHandler);
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = 0;
if (getenv("GHUNIT_CLI")) {
retVal = [GHTestRunner run];
} else {
retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIPhoneAppDelegate");
}
[pool release];
return retVal;
}
다만 그 다른 이름의 파일이 컴파일될 파일 목록에 있는지만 체크 하세요.
그리고 2번째 줄에서 #import <GHUnitIOS/GHUnit.h> 에서 IOS를 빼 주고 넣어 주시면 됩니다.
그리고 테스트 할 파일을 추가해 줍니다.
파일을 새로 만드시고, h와 m 파일에 아래와 같이 넣어 줍니다.
ExampleTest.h
#import <Foundation/Foundation.h>
#import <GHUnit/GHUnit.h>
@interface ExampleTest : GHTestCase { }
@end
ExampleTest.m
#import "ExampleTest.h"
@implementation ExampleTest
- (BOOL)shouldRunOnMainThread { // By default NO,
// but if you have a UI test or test dependent on running on the main thread return YES
return NO;
}
- (void)setUpClass {
// Run at start of all tests in the class
}
- (void)tearDownClass {
// Run at end of all tests in the class
}
- (void)setUp {
// Run before each test method
}
- (void)tearDown {
// Run after each test method
}
- (void)testFoo {
NSString *a = @"foo";
GHTestLog(@"I can log to the GHUnit test console: %@", a);
// Assert a is not NULL, with no custom error description
GHAssertNotNULL(a, nil);
// Assert equal objects, add custom error description
NSString *b = @"bar";
GHAssertEqualObjects(a, b, @"A custom error message. a should be equal to: %@.", b);
}
- (void)testBar {
// Another test
}
@end
3.Unit Test 실행해 보기
여기까지 잘 마치셨다면, xcode 4.0의 상단에 보시면, run, stop 옆에 선택상자가 있을 겁니다. 여기서 Tests | iPhone 4.2 Simulator 를 선택하고 run 버튼을 누릅니다.
그러면, 아래와 같이 Unit Test가 실행이 됩니다.
run을 눌러서.. 제작한 함수가 정상적으로 잘 동작하는지 확인해 보시면 됩니다.
댓글0