在Ruby中,我曾经使用vcr gem来测试http请求,该gem记录了请求,因此测试不会向真实主机发送请求。在iOS8世界中是否有类似的东西呢?
我想要测试的请求确实需要被记录,因为这些请求可能在某个时间过期,并返回其他响应。
附言:如果有类似于XCTest的默认苹果/iOS方法/库进行测试将是很好的。
附言:如果有类似于XCTest的默认苹果/iOS方法/库进行测试将是很好的。
我不确定我是否正确理解了你的意思。但如果我理解正确,你应该能够使用XCTest
来测试你的请求和响应。
class Tests:XCTestCase{
func testing(){
var expectation = self.expectationWithDescription("Your request")
var url = NSURL(string: "http://yourUrl.com")
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
if let httpRes = response as? NSHTTPURLResponse {
println("status code=",httpRes.statusCode)
//200 means OK
if httpRes.statusCode == 200 {
println(NSString(data: data, encoding: NSUTF8StringEncoding))
}
}else{
println("error \(error)")
}
}
}
}
NSString *loadRoomJSON = @{ @"key" : @"value" }; /* some JSON */
NSNumber identifier = @1;
[OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) {
NSString *url = [NSString stringWithFormat:@"v1/user/%@/room", identifier];
XCTAssert([request.URL.relativePath containsString:url], @"Expected certain URL");
return YES;
} andRespond:^OHHTTPStubsResponse *(NSURLRequest *request) {
return [OHHTTPStubsResponse responseWithJSONObject:loadRoomJSON statusCode:200 headers:nil];
}];
XCTestExpectation *loadPromise = [self expectation:@"Room loaded"];
[service loadRoomOnSucceed:^(Room *room) {
// Do your asserts here. For us, the JSON is mapped to an object
// so for example you could assert that the object is mapped correctly
[loadPromise fulfill];
} onFail:^(NSError *error) {
expect(error).to.beNil();
}];
[self waitForExpectationsWithTimeout:1.0 handler:^(NSError *error) {
expect(error).to.beNil();
}];
curl -is
记录每个请求,然后才能在测试中使用它,这并不是很方便。此外,如果有一天我想要更新我的记录请求,那么将会非常麻烦,因为我需要手动重新记录每个请求。 - hasrthur