iOS接口测试分享_第1页
iOS接口测试分享_第2页
iOS接口测试分享_第3页
iOS接口测试分享_第4页
iOS接口测试分享_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

iOS接口测试分享中国移动杭州研发中心2016年2月*

目录什么是iOS接口测试为什么要做iOS接口测试12iOS接口测试介绍3XCTest测试框架简介4测试举例5什么是iOS接口测试?SDK的英文全名是SoftwareDevelopmentKit(软件开发工具包),一般是一些由第三方服务商提供,用于实现应用软件产品某项功能的工具包,通常以集合API、文档、工具的形式出现。iOSSDK是一堆iOS接口的集合,接口也就是函数,包括系统之间的调用、服务之间的调用等。接口测试就是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。iOS接口测试是对暴露到外部的接口进行的测试,一个接口方法会有自己特定的业务定义,所以做接口测试时更多需要从业务的角度去考虑如何测试这个接口,同时还需要根据接口本身的定义对参数限制进行测试。为什么要做iOS接口测试?功能接口是外部用户使用的直接对象,作为SDK提供商,我们一定要保证提供给外部用户使用的接口方法具有稳定的功能和健壮的容错性。效率首先,节省测试成本。根据数据模型推算,底层的一个bug能够引发上层的8个左右bug,而且底层的bug很容易引起业务层更多的问题。相反接口测试能够提供系统复杂度上升情况下的低成本高效率的解决方案。其次,接口测试不同于传统开发的单元测试,接口测试是站在用户的角度对系统接口进行全面高效持续的检测。最后,接口测试是自动化并且可以持续集成的,这也是为什么接口测试能够低成本高收益的根源。总之,接口测试是保证高复杂性系统质量的内在要求和低成本的经济利益的驱动作用下的最佳解决方案。iOS接口测试介绍通过Xcode创建一个工程,导入被测SDK,编写测试脚本,然后执行测试。每一个测试用例,其本质是一个函数,该函数中包含调用被测方法的过程。某一被测方法会有多个测试用例,一般情况将同一被测方法的测试用例放在同一个测试类中,将同一类中的被测方法的测试脚本放在同一组中。12iOS接口测试介绍34XCTest作为测试框架是因为它非常简单并且与Xcode的IDE直接集成。XCTest如何工作苹果提供了一些关于如何使用XCTest的官方文档。测试用例被分到继承XCTestCase的不同子类中去。因为测试用例都是简单的类和方法,所以我们可以适当地添加一些@property和辅助方法。考虑到代码的重用性,我们的所有测试用例类都有一个共同的父类,也就是TestCase,它也是XCTestCase的子类,所有的测试类都是我们的TestCase类的子类。命名要求因为测试用例仅仅只是一个以test为开头的方法,所以典型的测试用例方法看起来就像这样:-(void)testRegisterFunc{

//testcode}XCTest测试框架简介Xcode6之后,新建的工程默认包含一个“工程名+Tests”的文件夹,文件夹下有一个工程名+Tests.m的文件(和其他的类文件不一样的是没有.h头文件),该文件中默认包含有setUp和tearDown的方法。-

(void)setUp

{

[super

setUp];

//

Put

setup

code

here.

This

method

is

called

before

the

invocation

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];

}setUp&tearDownsetUp方法在XCTestCase的测试方法调用之前调用。当测试全部结束之后调用tearDown方法。setUp方法可以在测试之前创建在testcase方法中需要用到的一些对象等。tearDown方法则在全部的testcase执行结束之后清理测试现场,释放资源删除不用的对象等。XCTest测试框架简介功能测试testcase中的每一个方法都是test开头,这样容易辨识。方法中会执行断言(Assertion),来判断这个测试是否通过。被测方法如果采用Block回调或者代理模式,它们的测试方式略有不同。Block回调测试方式XCTest测试框架简介代理模式测试方式:

XCTest测试框架简介XCTest测试框架简介常用的XCTest断言XCTest会用到很多的断言,但是只有一部分是常用到的。1)基本测试XCTAssert(expression,format...)如果expression(表达式)执行的结果为true的话,这个测试通过。否则测试失败,并在console中输出后面的format字符串。2)Bool测试对于bool型的数据,或者只是简单的bool型的表达式,使用XCTestAssertTrue或者XCTestAssertFalse:XCTAssertTrue(expression,format...)XCTAssertFalse(expression,format...)3)相等测试测试两个值是否相等使用XCTAssert[Not]Equal:XCTAssertEqual(expression1,expression2,format...)XCTAssertNotEqual(expression1,expression2,format...)XCTest测试框架简介XCTAssertGreaterThan[OrEqual]

&

XCTAssertLessThan[OrEqual],和下面的条件操作符比较的是一个意思

==

with

>,

>=,<,以及

<=

在Double、Float型数据的对比中使用XCTAssert[Not]EqualWithAccuracy来处理浮点精度的问题:XCTAssertEqualWithAccuracy(expression1,expression2,accuracy,format...)XCTAssertNotEqualWithAccuracy(expression1,expression2,accuracy,format...)4)Nil测试使用XCTAssert[Not]Nil断言判断给定的表达式值是否为nil:XCTAssertNil(expression,format...)XCTAssertNotNil(expression,format...)5)无条件失败断言XCTFail提供的是无条件断言:XCTFail(format...)无条件都是测试失败。这个断言有什么用处呢?在测试驱动里有这么个情况,你定义了测试方法,但是没有给出具体的实现。那么你不会希望这个测试能通过的。是的,XCTFail就是这么个用途。一般被用作一个占位断言,等你的测试方法完善好了之后再换成最贴近你的测试的断言。XCTest测试框架简介XCTestExpectation异步测试Xcode单元测试中加入的最令人兴奋的功能也许就是类XCTestExpression类带入的异步测试了。现在测试可以等待指定长度的时间,一直到某些条件符合的时候在开始测试。要使用异步测试,首先,用方法expectationWithDescription创建一个expection。XCTestExpectation*expect=[selfexpectationWithDescription:@"HandlerCalled"];然后,在方法的最后添加方法waitForExpectationsWithTimeout,指定等待超时的时间和指定时间内条件无法满足时执行的closure。[selfwaitForExpectationsWithTimeout:50handler:nil];剩下的就是在异步测试剩下的回调函数中告诉expectation条件已经满足。[expectfulfill];如果在测试中有多个expectation,则每个expectation都必须fulfill,否则测试不通过。XCTest测试框架简介接口举例:注册(void)registerWithNoPhoneUserName:(NSString*)userName

userPassword:(NSString*)userPassword

affirmPassword:(NSString*)affirmPassword

nikeName:(NSString*)nikeName

registerSuccessful:(registersucessful)registerSuccessFul

registerfail:(registerFail)registerfail;测试举例(void)testRegisterWithUserHasExist{

//Thisisanexampleofafunctionaltestcase.

NSString*usrName=@"661350";

NSString*usrPwd=@"123456";

NSString*affPwd=@"123456";

NSString*myNickName=@"1350Test";

XCTestExpectation*expect=[self

expectationWithDescription:@"HandlerCalled"];

[[XMPPManager

defaultManager]registerWithNoPhoneUserName:usrNameuserPassword:usrPwdaffirmPassword:affPwdnikeName:myNickNameregisterSuccessful:^{[expectfulfill];

NSLog(@"cjl======注册成功!=======");

XCTFail(@"........");}registerfail:^(NSString*error){[expectfulfill];

NSLog(@"cjl======注册

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论