使用 XCTest 进行异步方法测试
Async method testing using XCTest
我是 XCTest 的新手,刚开始编写测试用例。我写了几个功能测试用例,但我被困在下面的异步方法调用中。我阅读了 XCTestExpectation class 参考,但无法正确模拟。
如果知道如何测试下面的方法,将会非常有帮助。
这是我要测试的方法的详细信息,
- (void)getStudentInfo:(void (^)(BOOL))success failure:(void (^)(NSError *error))failure {
// Request formation CODE
// Here I have post call to AFNetworking
[httpSessionManager POST:uri
parameters:para
success:^(NSURLSessionDataTask *task, id responseObject) {
failure:^(NSURLSessionDataTask *task, NSError *error) {
}]
}
您需要研究为异步测试提供支持的 XCTest 期望。这是一个简化的例子(在 Swift 中,但同样适用于 Objective-C)
func testAsync() {
let expectation = expectationWithDescription("Waiting for something")
let someObject = ...
someObject.doSomethingWithCompletion({ () in
expectation.fulfill()
})
waitForExpectationsWithTimeout(3.0, handler: nil)
// Verify Results
}
简单的解释就是测试会在waitFor...
处等待,直到fulfil()
方法被调用。或者超时并抛出错误。
您还可以设置对通知和属性的期望。查看 XCTest class doco 了解详情。
我是 XCTest 的新手,刚开始编写测试用例。我写了几个功能测试用例,但我被困在下面的异步方法调用中。我阅读了 XCTestExpectation class 参考,但无法正确模拟。
如果知道如何测试下面的方法,将会非常有帮助。
这是我要测试的方法的详细信息,
- (void)getStudentInfo:(void (^)(BOOL))success failure:(void (^)(NSError *error))failure {
// Request formation CODE
// Here I have post call to AFNetworking
[httpSessionManager POST:uri
parameters:para
success:^(NSURLSessionDataTask *task, id responseObject) {
failure:^(NSURLSessionDataTask *task, NSError *error) {
}]
}
您需要研究为异步测试提供支持的 XCTest 期望。这是一个简化的例子(在 Swift 中,但同样适用于 Objective-C)
func testAsync() {
let expectation = expectationWithDescription("Waiting for something")
let someObject = ...
someObject.doSomethingWithCompletion({ () in
expectation.fulfill()
})
waitForExpectationsWithTimeout(3.0, handler: nil)
// Verify Results
}
简单的解释就是测试会在waitFor...
处等待,直到fulfil()
方法被调用。或者超时并抛出错误。
您还可以设置对通知和属性的期望。查看 XCTest class doco 了解详情。