IOS单元测试(—)
来源:互联网 发布:淘宝助手安卓版 编辑:程序博客网 时间:2024/06/05 07:12
单元测试
- OCUnit(即XCTest测试)
- 这个就是苹果自己的测试框架
- GHUnit
- 这是一个可视化的测试框架,可以点击app来决定测试哪个方法,并且可以点击查看测试结果等。(后续详细叙述)
- OCMock
- 这个是模拟某个方法或者属性的返回值。(后续详细叙述)
创建一个简单的单元测试
- 新建项目:
最简单的单元测试 - 一个简单的测试demo
- 该类继承自XCTestCase类,其中包含三个方法:setUp,tearDown和testExample。setUp方法用于在测试前设置好要测试的方法,tearDown则是在测试后将设置好的要测试的方法拆卸掉。testExample是测试方法。测试方法必须以testxxx的格式,并且不能有参数和返回值,不然不会识别为测试方法。测试方法的执行顺序是字典排序。快捷键command+ u进行单元测试,这个快捷键是全部测试。当有多个测试方法时候不管顺序如何排列,测试方法执行的顺序与方法名中test后面的字符大小有关,小者优先,例如testA,testB1,testB2三个方法相继执行。在testExample方法中输入
NSLog(@"自定义测试testExample"); NSString *temp; int a=3; XCTAssertNil(temp,@"a为空"); XCTAssertTrue(3==a,@"a等于3");
进行网络请求的测试
使用CocoaPods安装AFNetworking和STAlerView
# platform :ios, '9.0'target 'UnitTestDemo' dopod 'AFNetworking', '~> 3.1.0'pod 'STAlertView', '~> 1.0.0'
在Info.plist中添加NSAppTransportSecurity类型Dictionary。 在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES。
IOS9的http安全问题:现在进行异步请求的网络测试,由于测试方法主线程执行完就会结束,所以需要设置一下否则没发查看异步返回的结果。
#define WAIT do {\[self expectationForNotification:@"RSBaseTest" object:nil handler:nil];\[self waitForExpectationsWithTimeout:30 handler:nil];\} while (0);#define NOTIFY \[[NSNotificationCenter defaultCenter]postNotificationName:@"RSBaseTest" object:nil];
测试方法
-(void)testRequest{ AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // 返回的格式 JSON manager.responseSerializer = [AFJSONResponseSerializer serializer]; manager.requestSerializer = [AFHTTPRequestSerializer serializer]; // 可接受的文本参数规格 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"text/plain", nil]; manager.requestSerializer.timeoutInterval = 10; [manager GET:@"http://www.weather.com.cn/adat/sk/101110101.html" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"responseObject:%@",responseObject); XCTAssertNotNil(responseObject, @"返回出错"); self.stAlertView = [[STAlertView alloc]initWithTitle:@"验证码" message:nil textFieldHint:@"请输入手机验证码" textFieldValue:nil cancelButtonTitle:@"取消" otherButtonTitle:@"确定" cancelButtonBlock:^{ //点击取消返回后执行 [self testAlertViewCancel]; NOTIFY //继续执行 } otherButtonBlock:^(NSString *b) { //点击确定后执行 [self alertViewComfirm:b]; NOTIFY //继续执行 }]; NOTIFY //继续执行 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"error:%@",error); XCTAssertNil(error, @"请求出错"); // NOTIFY //继续执行 }]; WAIT //暂停}-(void)testAlertViewCancel{ NSLog(@"取消");}-(void)testAlertViewComfirm{ [self alertViewComfirm:nil];}-(void)alertViewComfirm:(NSString *)test{ NSLog(@"手机验证码:%@",test);}
断言测试
下面一共18个断言(SDK中也是18个,其含义转自ios UnitTest 学习笔记,真心佩服原文的博主,部分宏小弟已经测试过):XCTFail(format…) 生成一个失败的测试;XCTAssertNil(a1, format...)为空判断,a1为空时通过,反之不通过;XCTAssertNotNil(a1, format…)不为空判断,a1不为空时通过,反之不通过;XCTAssert(expression, format...)当expression求值为TRUE时通过;XCTAssertTrue(expression, format...)当expression求值为TRUE时通过;XCTAssertFalse(expression, format...)当expression求值为False时通过;XCTAssertEqualObjects(a1, a2, format...)判断相等,[a1 isEqual:a2]值为TRUE时通过,其中一个不为空时,不通过;XCTAssertNotEqualObjects(a1, a2, format...)判断不等,[a1 isEqual:a2]值为False时通过;XCTAssertEqual(a1, a2, format...)判断相等(当a1和a2是 C语言标量、结构体或联合体时使用,实际测试发现NSString也可以);XCTAssertNotEqual(a1, a2, format...)判断不等(当a1和a2是 C语言标量、结构体或联合体时使用);XCTAssertEqualWithAccuracy(a1, a2, accuracy, format...)判断相等,(double或float类型)提供一个误差范围,当在误差范围(+/-accuracy)以内相等时通过测试;XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...) 判断不等,(double或float类型)提供一个误差范围,当在误差范围以内不等时通过测试;XCTAssertThrows(expression, format...)异常测试,当expression发生异常时通过;反之不通过;(很变态) XCTAssertThrowsSpecific(expression, specificException, format...) 异常测试,当expression发生specificException异常时通过;反之发生其他异常或不发生异常均不通过;XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...)异常测试,当expression发生具体异常、具体异常名称的异常时通过测试,反之不通过;XCTAssertNoThrow(expression, format…)异常测试,当expression没有发生异常时通过测试;XCTAssertNoThrowSpecific(expression, specificException, format...)异常测试,当expression没有发生具体异常、具体异常名称的异常时通过测试,反之不通过;XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...)异常测试,当expression没有发生具体异常、具体异常名称的异常时通过测试,反之不通过
特别注意下XCTAssertEqualObjects和XCTAssertEqual。
XCTAssertEqualObjects(a1, a2, format…)的判断条件是[a1 isEqual:a2]是否返回一个YES。
XCTAssertEqual(a1, a2, format…)的判断条件是a1 == a2是否返回一个YES。
对于后者,如果a1和a2都是基本数据类型变量,那么只有a1 == a2才会返回YES。例如下面代码中只有第二行可以通过测试:
// 比较基本数据类型变量XCTAssertEqual(1, 2, @"a1 = a2 shoud be true"); // 无法通过测试XCTAssertEqual(1, 1, @"a1 = a2 shoud be true"); // 通过测试
但是,如果a1和a2都是指针,那么只有a1和a2指向同一个对象才会返回YES。array1和array2指向不同对象,无法通过测试。.例如下面的代码中:
// 比较NSArray对象NSArray *array1 = @[@1];NSArray *array2 = @[@1];NSArray *array3 = array1;XCTAssertEqual(array1, array2, @"a1 and a2 should point to the same object"); // 无法通过测试XCTAssertEqual(array1, array3, @"a1 and a2 should point to the same object"); // 通过测试
对于字符串就不同了,由于str1和str2指向同一常量,常量在内存的data段中地址是固定的,所以二者地址相同。
// 比较NSString对象NSString *str1 = @"1";NSString *str2 = @"1";NSString *str3 = str1;XCTAssertEqual(str1, str2, @"a1 and a2 should point to the same object"); // 通过测试XCTAssertEqual(str1, str3, @"a1 and a2 should point to the same object"); // 通过测试
0 0
- IOS单元测试(—)
- IOS单元测试(1)
- iOS开发——单元测试
- ios 单元测试初识(XCTestCase)
- IOS 单元测试
- iOS单元测试
- iOS单元测试
- IOS 单元测试
- [ios] 单元测试
- iOS 单元测试
- ios 单元测试
- iOS 单元测试
- ios单元测试
- iOS 单元测试
- IOS 单元测试
- IOS 单元测试
- iOS 单元测试
- IOS 单元测试
- Django Form源码分析之Field验证逻辑
- GIT 添加ssh key
- html中的css样式
- HTML标签元素的分类
- UICollectionView使用
- IOS单元测试(—)
- netstat
- iOS-利用运行时给分类添加属性
- 数字推理技巧
- PHP 生成excel|好用强大的php excel类库
- Vim的分割窗口split命令
- 内存是手游的硬伤——Unity游戏Mono内存管理与泄漏
- hiho一下 第109周:Tower Defense Game
- 欢迎使用CSDN-markdown编辑器