使用 XCTest 进行异步方法测试
Posted
技术标签:
【中文标题】使用 XCTest 进行异步方法测试【英文标题】:Async method testing using XCTest 【发布时间】:2016-04-20 02:09:32 【问题描述】:我是 XCTest 的新手,开始编写测试用例。我已经编写了几个功能测试用例,但我陷入了异步方法调用之下。我阅读了 XCTestExpectation 类参考,但无法正确模拟。
如果了解如何测试以下方法,这将非常有帮助。
这是我要测试的方法的详细信息,
- (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)
]
【问题讨论】:
虽然单元测试有异步测试的技术,但一般来说异步流程和单元测试并不匹配。 【参考方案1】:您需要研究为异步测试提供支持的 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 类文档。
【讨论】:
以上是关于使用 XCTest 进行异步方法测试的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法使用 XCTest 对 Touch Id 进行单元测试?