首先,需要搭建本地环境,参考 PhpStorm 本地调试;核心步骤是配好 IDE 环境以及修改 hosts 文件。

其次,使用单元测试,参考 iOS 测试学习小结;显然,本该一键完成的测试,不应该调出模拟器 / 真机的界面去人工操作。

XDebug 通过区分请求是否带 XDEBUG_SESSION=PHPSTORM 这一 Cookie 去判断是否需要执行断点操作。

AFNetworking 为例,需要做两件事情。

  1. 在测试中进行同步请求而非异步
  2. 请求中带上所需 Cookie
1
2
3
4
5
6
7
8
9
10
- (void)testThatItAppendsAString;
{
NSString *s1 = @"Foo";
XCTestExpectation *expectation = [self expectationWithDescription:@"Handler called"];
[s1 appendString:@"Bar" resultHandler:^(NSString *result){
[expectation fulfill];
XCTAssertEqualObjects(result, @"FooBar");
}];
[self waitForExpectationsWithTimeout:0.1 handler:nil];
}
1
2
3
4
5
6
7
8
9
10
11
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];

// 设置 Cookie
[manager.requestSerializer setValue:@"XDEBUG_SESSION=PHPSTORM" forHTTPHeaderField:@"Cookie"];

[manager POST:url parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
// ...
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// ...
}];

环境布置完毕之后,执行 Command + U 即可进行单元测试,本地服务器在需要的地方打断点;整个过程无需依赖网络,简洁高效。