2014-02-20 98 views
0

我有關於如何在塊中使用Assert的問題?如何在塊中使用斷言?

例如:

[someObject postRequestWithBlock:^(BOOL succeeded, NSError *error) { 

    CFRunLoopRef runLoopRef = CFRunLoopGetCurrent(); 
    CFRunLoopStop(runLoopRef); 

    GHAssertTrue(succeeded&&!error, @"faile"); 

}]; 
CFRunLoopRun(); 

它必須發送的異步請求。 完成後,我需要聲明它是否成功。

但它會崩潰!

我該怎麼辦?

thx!

PS: - (void)testCase { [self prepare];

__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]; 

__block typeof (&*self) bself = self; 

[request setCompletionBlock:^{ 

    [bself notify:kGHUnitWaitStatusSuccess forSelector:@selector(testCase)]; 
    GHAssertTrue(YES, @"faile"); 
}]; 

[request setFailedBlock:^{ 

    [bself notify:kGHUnitWaitStatusFailure forSelector:@selector(testCase)]; 
    GHAssertTrue(NO, @"faile"); 
}]; 

[request startAsynchronous]; 

[self waitForStatus:kGHUnitWaitStatusCancelled timeout:15.0]; 

}

+0

你不想斷言完成是錯誤的,錯誤是真的嗎?你有他們的另一種方式。 –

回答

0

看一看在async section of the docs(主要是ExampleAsyncTest.m:下位)。喜歡的東西:

-(void)testCase 
{ 
    [someObject postRequestWithBlock:^(BOOL succeeded, NSError *error) { 

     [self notify:succeeded ? kGHUnitWaitStatusSuccess : kGHUnitWaitStatusFailure forSelector:@selector(testCase)]; 

     GHAssertTrue(succeeded&&!error, @"faile"); 

    }]; 

    [self waitForStatus:kGHUnitWaitStatusSuccess timeout:10.0];  
} 

我會建議Expecta測試框架也是如此,它有一個乾淨的語法。

+0

非常感謝您的幫助! 但我仍然在這裏,有一個問題。 如果在這個塊中斷言,它會崩潰。 我的阻擋是問題嗎? – user3332433