iOS单元测试

覆盖率报告 Xcode7开始,自带覆盖率

设置要点:

-1)Scheme中开启Gather Coverage data

-2) 针对于AppTarget来测试,而非Test Target

框架

-expecta  expect(error).not.beNil()

-specter  describe(“”)it(“”)

-Kiwi      describe(“”)it(“”)

执行测试快捷键

cmd + 5 切换到测试选项卡后会看到很多小箭头,点击可以单独或整体测试

cmd + U 运行整个单元测试

一.方法注解

// 在每一个测试用例开始前调用,用来初始化相关数据

- (void)setUp {

[super setUp];

// Put setup code here. This method is called before the  invo cation of each test method in the class.

//初始化的代码,在测试方法调用之前调用

}

// 在测试用例完成后调用,可以用来释放变量等结尾操作

- (void)tearDown {

// Put teardown code here. This method is called after the invocation of each test method in the class.

// 释放测试用例的资源代码,这个方法会每个测试用例执行后调用

[super tearDown];

}

// 测试方法

- (void)testExample {

// This is an example of a functional test case.

// Use XCTAssert and related functions to verify your tests produce the correct results.

// 测试用例的例子,注意测试用例一定要test开头

}

// 性能测试方法,通过测试block中方法执行的时间,比对设定的标准值和偏差觉得是否可以通过测试

- (void)testPerformanceExample {

// This is an example of a performance test case.

// 测试性能例子,有Instrument调试工具之后,其实这个没毛用。

[self measureBlock:^{

// Put the code you want to measure the time of here.

// 需要测试性能的代码

}];

}

二.网络请求方法测试

-(void)testRequest{

XCTestExpectation *expectation =[self expectationWithDescription:@"没有满足期望"];

AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];

sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];

[sessionManager GET:@"http://www.weather.com.cn/adat/sk/101110101.html" parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

NSLog(@"responseObject:%@", [NSJSONSerialization JSONObjectWithData:responseObject options:1 error:nil]);

XCTAssertNotNil(responseObject, @"返回出错");

[expectation fulfill];

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

XCTAssertNil(error, @"请求出错");

}];

[self waitForExpectationsWithTimeout:5.0 handler:^(NSError *error) {

if (error) {

NSLog(@"Timeout Error: %@", error);

}}];}

三.模拟异步测试

- (void)testExample {

XCTestExpectation *exp = [self expectationWithDescription:@"这里可以是操作出错的原因描述。。。"];

NSOperationQueue *queue = [[NSOperationQueue alloc]init];

[queue addOperationWithBlock:^{

//模拟这个异步操作需要2秒后才能获取结果,比如一个异步网络请求

sleep(2);

//模拟获取的异步操作后,获取结果,判断异步方法的结果是否正确

XCTAssertEqual(@"a", @"a");

//如果断言没问题,就调用fulfill宣布测试满足

[exp fulfill];

}];

//设置延迟多少秒后,如果没有满足测试条件就报错

[self waitForExpectationsWithTimeout:3 handler:^(NSError * _Nullable error) {

if (error) {

NSLog(@"Timeout Error: %@", error);

}}];}


lizhiwei的Demo

其他单元测试视频地址 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 单元测试不是一个小工程,需要多用些时间才能做好,不要希望通过这个文章就能掌握单元测试,这只是一个入门,需要自己动手...
    勇不言弃92阅读 8,149评论 9 60
  • 原文地址:https://www.raywenderlich.com/150073/ios-unit-testin...
    默默熊阅读 5,184评论 1 67
  • 编写测试可不是一项迷人的工作;然而,由于测试可以避免使你的宝贝应用程序变成一块充斥错误的大垃圾场,所以编写测试又是...
    cosWriter阅读 1,773评论 0 4
  • 最近,上线的版本中改动了一个接口,当时没有注意导致了线上严重的Crash.很难受。哎,不得的不好好学习一下单元测试...
    奇董阅读 1,502评论 0 3
  • 那一年 高考还是七月的七八九 每逢考试必下雨 带好雨伞吆 班主任千叮咛万嘱咐 别人班的化学老师给我们串了一节课 说...
    龙莹洁阅读 131评论 0 0

友情链接更多精彩内容