XCTestの小さなテクニック
2143 ワード
XCTestの小さなテクニック
一つのテストで、別のテスト方法を別の状態で走ってみました.
また、Xcode 6にはXCTestExpetationが追加されており、以降は使用しません.
ダイレクトライト
一つのテストで、別のテスト方法を別の状態で走ってみました.
// alternate what setup done
// full tests in alternated state
NSArray * tests = [FileLibraryTests testInvocations];
for (NSInvocation * inv in tests ) {
NSString * sel = NSStringFromSelector(inv.selector);
if (![sel containsString:@"WithInit"] && ![sel containsString:@"Monitoring"]) {
[inv invokeWithTarget:self];
}
}
//back to normal state
また、Xcode 6にはXCTestExpetationが追加されており、以降は使用しません.
#import <XCTest/XCTestCase+AsynchronousTesting.h>
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
dispatch_after(dispatch_time(0, (int64_t)(0.2 * NSEC_PER_SEC)),
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
... dispatch_semaphore_signal(sema); ...
}
);
dispatch_semaphore_wait(sema, dispatch_time(DISPATCH_TIME_NOW, 30*NSEC_PER_SEC));
ダイレクトライト
XCTestExpectation *expectation = [self expectationWithDescription:@"xxx"];
// invoke it in code async executing
... ^(){
[expectation fulfill];
} ...
[self waitForExpectationsWithTimeout:1 handler:^(NSError *error) {
// cleanup.
}];