DTRequestVerifier
为单元测试提供的简单易扩展的NSURLRequest验证。
支持属性
- HTTP方法
- 协议
- 主机
- 路径
- 查询参数
- 主体参数(原始,JSON,Plist)
- HTTP头字段
- 通过子类化访问其他NSURLRequest属性
要求
- iOS 5
- Mac OS X 10.7
使用 XCTest 的示例
NSURL * url = [NSURL URLWithString:@"www.google.com/test?query=foo&count=5"]
NSURLRequest * request = [[NSURLRequest alloc] initWithURL:url];
DTRequestVerifier * verifier = [DTRequestVerifier verifier];
verifier.host = @"www.google.com";
verifier.path = @"/test";
verifier.queryParams = @{@"query":@"foo",@"count":@"5"};
XCTAssert([verifier verifyRequest:request]);
高级示例
NSDictionary * parameters = @{@"foo":@"bar", @"apikey":@"12345"};
NSURL * url = [NSURL URLWithString:@"www.google.com/user/create"];
NSMutableURLRequest * request = [[NSMutableURLRequest alloc] initWithURL:url];
request.HTTPMethod = @"POST";
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters
options:0
error:nil]];
DTRequestVerifier * verifier = [DTRequestVerifier verifier];
verifier.host = @"www.google.com";
verifier.path = @"/user/create";
verifier.HTTPMethod = @"POST";
verifier.bodyParams = parameters;
XCTAssert([verifier verifyRequest:request]);
OHHTTPStubs
虽然 DTRequestVerifier 可以作为一个独立的工具使用,但在使用其他测试框架时,例如 OHHTTPStubs,它也能提供极大的帮助。
NSString *path =[[NSBundle mainBundle] pathForResource:@"Example" ofType:@"json"];
[OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) {
return [verifier verifyRequest:request];
}
withStubResponse:^OHHTTPStubsResponse *(NSURLRequest *request) {
return [OHHTTPStubsResponse responseWithFileAtPath:path
statusCode:200
headers:@{@"Content-Type":@"application/json"}];
}];
最佳实践
AFNetworking 2.0 引入了一个优秀的请求序列化系统,这个系统可以大大减少创建 NSURLRequests 所需的代码量。你绝对应该去看看!