gpt4 book ai didi

iphone - 如何测试 sendsynchronousRequest : on XCTest

转载 作者:太空狗 更新时间:2023-10-30 03:21:18 26 4
gpt4 key购买 nike

抱歉这个菜鸟问题,但我正在尝试测试连接,但我无法验证请求的返回,因为测试在完成处理程序有机会执行之前结束。举例说明:

-(void)testConnection
{

[[Conector sharedInstance] performAsynchronousRequestWithServerRequest:_srvRequest completionHandler:^(RequestAsynchronousStatus finishStatus, NSData *data) {
if (finishStatus == RequestAsynchronousOK){
_data = data;
NSLog(@"Data OK");
}
}];

XCTAssertNotNil(_data, @"Data was nil");

}

当我尝试断言时,_data 将始终为 nil,因为尚未执行完成处理程序。有一种机制可以强制测试等待,直到我从 sendAsynchronousRequest: 方法收到一些响应。提前致谢。

最佳答案

这看起来正是您所需要的:

XCAsyncTestCase : 具有异步能力的 SenTestCase 子类。

基本上,您应该像这样编写测试:

- (void)testConnection
{
[[Conector sharedInstance] performAsynchronousRequestWithServerRequest:_srvRequest completionHandler:^(RequestAsynchronousStatus finishStatus, NSData *data) {
if (finishStatus == RequestAsynchronousOK)
{
_data = data;
[self notify:XCTAsyncTestCaseStatusSucceeded];
NSLog(@"Data OK");
}
}];

[self waitForTimeout:10];

XCTAssertNotNil(_data, @"Data was nil");
}

注意 waitForTimeout: 调用和 notify: 调用。 10 秒应该足以进行测试,但这取决于请求本身。

您甚至可以更具体地等待某个状态,如下所示:

[self waitForStatus: XCTAsyncTestCaseStatusSucceeded timeout:10];

这样,如果连接未能通知 XCTAsyncTestCaseStatusSucceeded 状态,等待调用将超时并且您的测试将失败(本应如此)。

关于iphone - 如何测试 sendsynchronousRequest : on XCTest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19125789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com