2015-07-14 1 views
0

Я новичок в линии ios. У меня есть задача создать тестовый пример для этого метода.блок-тест для асинхронного метода ios

+ (void)myMethod:(NSString *)paramA callback:(void(^)(NSString *result, BOOL success))callback; 
// ... Some code that runs async (for example, something that fetches data from the internet)... 

// Call the callback function in a background thread 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    callback(@"Success", YES); 
}); 
} 

Как через RND я добраться до KNO-то связанное с XCTestExpectation используется для создания модульных тестовых случаев ....

ответ

0

Просто позвоните fulfill в блоке compeletion. Например:

Предположим, что FunctionObj имеет функцию

@interface FunctionObj : NSObject 
+ (void)myMethod:(NSString *)paramA callback:(void(^)(NSString *result, BOOL success))callback; 
@end 
@implementation FunctionObj 
+ (void)myMethod:(NSString *)paramA callback:(void(^)(NSString *result, BOOL success))callback { 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    callback(@"Success", YES); 
    }); 
} 
@end 

Тогда тест должен быть

- (void)testAsyncFunction { 
    XCTestExpectation * expectation = [self expectationWithDescription:@"Test async method"]; 
    [FunctionObj myMethod:@"1" callback:^(NSString *result, BOOL success) { 
     XCTAssert(success,"should be succeed"); 
     XCTAssertNotNil(result,@"Should not be nil"); 
     [expectation fulfill]; 
    }]; 
    [self waitForExpectationsWithTimeout:10 handler:^(NSError *error) { 
     //Do something when time out 
    }]; 
} 
+0

спасибо мате ... он служит своей цели .... просто хочу спросить такую ​​вещь, как это для целей тестирования. так что это одноименный тест фуллетов, каждый из которых означает все точки зрения, такие как изменение значений, прерывание данных, тайм-аут и т. д .... –