在进行http通信时常常使用异步,xcode6新增加了异步单元测试的功能。
之前我们在进行异步测试时,只能阻塞主线程等待通信结束。如下:
- (void)testAsyncTheOldWay
{
NSDate *timeoutDate = [NSDate dateWithTimeIntervalSinceNow:5.0];
__block BOOL responseHasArrived = NO;
[self.pageLoader requestUrl:@"http://bignerdranch.com"
completionHandler:^(NSString *page) {
NSLog(@"The web page is %ld bytes long.", page.length);
responseHasArrived = YES;
XCTAssert(page.length > 0);
}];
while (responseHasArrived == NO && ([timeoutDate timeIntervalSinceNow] > 0)) {
CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.01, YES);
}
if (responseHasArrived == NO) {
XCTFail(@"Test timed out");
}
}
其中轮询判断状态及timeout时间。
现在的xcode6,如下进行异步测试:
(void)testWebPageDownload
{
XCTestExpectation *expectation =
[self expectationWithDescription:@"High Expectations"];
[self.pageLoader requestUrl:@"http://bignerdranch.com"
completionHandler:^(NSString *page) {
NSLog(@"The web page is %ld bytes long.", page.length);
XCTAssert(page.length > 0);
[expectation fulfill];
}];
[self waitForExpectationsWithTimeout:5.0 handler:^(NSError *error) {
if (error) {
NSLog(@"Timeout Error: %@", error);
}
}];
}
在Xcode 6里,苹果以XCTestExpection类的方式向XCTest框架里添加了测试期望(test expection)。当我们实例化一个测试期望(XCTestExpectation)的时候,测试框架就会预计它在之后的某一时刻被实现。最终的程序完成代码块中的测试代码会调用XCTestExpection类中的fulfill方法来实现期望。这一方法替代了我们之前例子里面使用responseHasArrived作为Flag的方式,这时我们让测试框架等待(有时限)测试期望通过XCTestCase的waitForExpectationsWithTimeout:handler:方法实现。如果完成处理的代码在指定时限里执行并调用了fulfill方法,那么就说明所有的测试期望在此期间都已经被实现。否则,这个测试就悲剧了,它会默默的存在程序中而不会被实现哪怕一次……
分享到:
相关推荐
开发者可以在Xcode中创建测试用例,通过UIAutomation或者Xcode Server来执行异步测试,如对blocks的操作进行异步测试,同时也可以通过TestFlight进行发布测试。 具体到Xcode Server的实现方式,可以利用命令行工具...
在测试方面,Xcode 15.0引入了改进的UI测试功能,支持更复杂的测试脚本编写和自动化测试场景。这使得开发者能够更全面地测试应用的各种交互和用例,提高产品质量。 最后,Xcode 15.0还加强了源代码版本控制,支持...
2. **Swift 5.5支持**:Xcode 13.1集成了Swift 5.5,带来了更快的编译速度和更多新语言特性,如async/await,使得异步编程变得更加简洁。 3. **改进的模拟器**:新的模拟器提供更快的启动速度和更真实的设备模拟,...
在调试方面,Xcode 12.0的Source Control集成得到了加强,提供了更好的版本控制体验,同时Xcode的调试工具也增加了对并发编程的支持,这对于多线程和异步编程的调试至关重要。 最后,Xcode 12.0还加强了对Apple ...
1. **Swift 5.3**:这是Xcode 12.0内置的Swift编程语言版本,带来了性能提升和新功能,如更强大的类型推断、更好的错误处理以及对异步编程的支持。 2. **iOS 14支持**:虽然SDK主要讨论的是iOS 12的调试,但Xcode ...
7. **测试与调试**: 使用Xcode的模拟器或真机设备进行测试,确保文件提供者功能正常工作。 综上所述,`FileProvider.framework`在Xcode 9.0中的引入,为开发者提供了更强大、灵活的文件共享功能,使得应用间的数据...
GHUnit 提供了丰富的功能,包括自动测试发现、异步测试支持以及详细的测试结果报告。它的核心思想是通过定义一系列测试用例来验证代码的各个部分,这些测试用例可以是独立的,也可以是相互依赖的。测试用例通常由...
【Xcode Webservice 源码详解】 Xcode Webservice 是一套用于开发基于Apple平台的iOS和macOS应用中Web服务交互的源代码库。它为开发者提供了在Xcode项目中轻松集成和管理网络请求的能力,使应用能够与服务器进行...
MVVM MVVM 是一个用 Swift 语言开发的 iOS 应用程序,用于演示如何在 iOS 项目中应用 MVVM 以及如何使用 Xcode6 内部构建工具在 Swift 中执行单元测试。 通知 当前版本可以在 Xcode 6.1 中编译。...异步测试 嘲笑
在测试方面,Xcode 3提供单元测试和界面测试工具,帮助开发者确保代码的质量和稳定性。学会编写和运行测试用例,以及如何利用模拟器和真机进行测试,对于保证软件的可靠性至关重要。 最后,我们还会涉及App Store的...
4. 异步测试:对于需要等待某些操作完成(如网络请求)的测试,可以使用`XCTestExpectation`来实现异步测试的同步。 总的来说,Xcode的XCTest框架为iOS开发者提供了完整的测试解决方案,涵盖了从简单的功能验证到...
6. **.playground**文件:Swift提供了Playgrounds,一个实时预览代码效果的环境,这在快速测试和学习新概念时非常有用。《城说》项目中可能包含这样的文件,便于开发者试验代码。 7. **SwiftUI**:虽然项目描述并未...
3. **EarlGrey**: Google推出的一个更高级的UI测试框架,提供了同步机制,能有效解决异步操作导致的测试失败问题。 **持续集成**: 1. **Jenkins**: 开源的CI/CD工具,可以配置为定期自动构建、测试和部署iOS项目。...
8. 测试异步操作,如定时器或后台任务,确保它们在不同线程环境下的正确性。 通过分析和运行这些示例,你可以了解到如何使用Xcode内置的 XCTest 框架来编写测试用例,以及如何使用断言(assertions)来检查预期结果...
10. **Unit Testing和UI Testing**: 在Swift之前,iOS开发者已经可以使用Xcode内置的测试框架进行单元测试和UI测试。了解这些测试方法对现代Swift开发同样重要。 11. **GCD (Grand Central Dispatch)**: 并发和多...
6. **运行测试**:在Xcode中运行测试套件,查看测试结果及任何失败的详细信息。 ## 常见应用场景 1. **用户流程测试**:测试应用的主要功能流程,如登录、注册、购物等。 2. **异常处理**:模拟异常情况,如网络...
本章节主要围绕iOS开发中的单元测试进行深入讲解,通过《图书iOS开发》一书中的“单元测试”部分,我们能够系统地了解如何在Xcode中进行有效的单元测试,这对于提高iOS应用的质量至关重要。 #### Xcode中的测试基础...
6. **错误处理和日志记录**:在自动化测试中,捕获和处理错误至关重要。学会使用Swift的错误处理机制,并记录详细的测试日志,以便于分析和解决问题。 7. **持续集成(CI)**:将Swift-Automator测试整合到持续集成...
在编译捕鱼达人这样的游戏时,Xcode提供了代码编辑、调试、构建和测试等一系列功能,使得开发流程更为高效。 在捕鱼达人的开发过程中,Objective-C作为主要的编程语言,其动态特性、消息传递机制和面向对象的特性...
它支持Swift和Objective-C两种语言,可以无缝集成到Xcode中,便于开发者进行测试脚本的编写与调试。此外,XCUITest还支持模拟手势操作,使得测试更加接近真实用户的使用场景。 #### 2. Appium 虽然Appium最初是为了...