单元测试Tests的简介及使用
作者:网络转载 发布时间:[ 2017/2/4 14:39:45 ] 推荐标签:软件测试 单元测试
/**
testLoadPersonAsync 异步加载测试:
苹果的单元测试的特点:早期的单元测试并不好用!
1.是串行的:
1.1 先 setUp --->
然后 test1
再 test2
再 test3 ......
后 tearDown 知道真相的我眼泪掉下来.
*/
#pragma mark - testLoadPersonAsync 异步加载测试
- (void)testLoadPersonAsync {
//Xcode6.0之后进行了改进:
//创建一个"预期"expectation:
XCTestExpectation *expectation = [self expectationWithDescription:@"异步加载 Person"] ;
[Person loadPersonAsync:^(Person *person) {
NSLog(@"-_- --> %@ <-- -_-" , person.name) ;
//标注预期达成:
[expectation fulfill] ;
}] ;
//等待预期达成:
//1.0f'之内预期达成我都认为是合理的:
[self waitForExpectationsWithTimeout:1.0f handler:^(NSError * _Nullable error) {
NSLog(@"哈哈哈 --> error = %@ <-- 哈哈哈" , error) ;
}] ;
}
@end
Person.h 文件
#import <Foundation/Foundation.h>
@interface Person : NSObject
//name:
@property (nonatomic, copy) NSString *name ;
//age:
@property (nonatomic) NSInteger age ;
//工厂方法:
+ (instancetype)personWithDictionary:(NSDictionary *)dictionary ;
//异步加载个人记录:异步加载数据回调传值都是用的 block!
//手写 block一定要注意格式: void (^) (Person *person)completion ;
+ (void)loadPersonAsync:(void (^) (Person *person))completion ;
@end
Person.m 文件
#import "Person.h"
@implementation Person
+ (instancetype)personWithDictionary:(NSDictionary *)dictionary {
//[[self alloc] init] ;这里用 self 是方便子类继承这个方法,在搞一个 person 的子类我不用在写这个方法了!
Person *obj = [[self alloc] init] ;
//KVC 方法:
[obj setValuesForKeysWithDictionary:dictionary] ;
//为了防止单元测试时年龄非法:
if (obj.age <= 0 || obj.age > 100) {
obj.age = 0 ;
}
return obj ;
}
//写一个空方法:解决多一个 title : boss 的键值对的问题:
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
}
+ (void)loadPersonAsync:(void (^)(Person *))completion {
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[NSThread sleepForTimeInterval:1.0f] ;
Person *person = [Person personWithDictionary:@{@"name":@"lisi" , @"age":@20}] ;
dispatch_async(dispatch_get_main_queue(), ^{
//在 OC 中写块代码回调的时候一定要写块代码是否存在的判断条件,否则一出问题会闪退:
if (completion != nil) {
//回调回来person 这个对象给我:
completion(person) ;
}
}) ;
}) ;
}
@end
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
iOS单元测试mocha、chai、sinon和istanbul实现百分之百的单元测试覆盖率关于单元测试的总结及思考编写更好的Java单元测试的7个技巧Android单元测试框架Robolectric3.0介绍(一)使用Kiwi单元测试总结单元测试如此重要,为什么你不知道Python单元测试??使用装饰器实现测试跳过和预期故障对Controller的单元测试写好单元测试的10个技巧单元测试的重要性Angular单元测试系列??Component、Directive、Pipe 以及ServiceAndroid单元测试的整理提升单元测试体验的利器--Mockito使用总结iOS UnitTest单元测试Vue的单元测试探索(二)
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南