XCTestAPI文档.docx

上传人:b****7 文档编号:9027865 上传时间:2023-02-02 格式:DOCX 页数:26 大小:35.21KB
下载 相关 举报
XCTestAPI文档.docx_第1页
第1页 / 共26页
XCTestAPI文档.docx_第2页
第2页 / 共26页
XCTestAPI文档.docx_第3页
第3页 / 共26页
XCTestAPI文档.docx_第4页
第4页 / 共26页
XCTestAPI文档.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

XCTestAPI文档.docx

《XCTestAPI文档.docx》由会员分享,可在线阅读,更多相关《XCTestAPI文档.docx(26页珍藏版)》请在冰豆网上搜索。

XCTestAPI文档.docx

XCTestAPI文档

XCTest

准备工作

对于新项目,在新建项目界面勾选上UITests;

对于旧项目,在项目界面点击菜单栏中的FileNewTarget…iOSTestiOSUITestingBundle。

sleepForTimeInterval:

线程休眠

[NSTreadsleepForTimeInterval:

1.0f];

也可以使用sleep(3),OC兼容C语言。

定义测试用例

XCTestCase

+(void)setUp;

在类中的第一个测试方法调用之前调用,区别于-(void)setUp:

在每个测试方法调用之前都调用。

+(void)tearDown;

在类中的最后一个测试方法完成后调用。

区别于-(void)tearDown:

在每个测试方法调用后都调用。

异步测试表达式

-(XCTestExpectation*)expectationWithDescription:

(NSString*)description;

指定时间内满足测试条件则测试通过,超时则输出description。

-(void)testAsynExample{

XCTestExpectation*exp=[selfexpectationWithDescription:

@"这里可以是操作出错的原因描述。

"];

NSOperationQueue*queue=[[NSOperationQueuealloc]init];

[queueaddOperationWithBlock:

^{

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

sleep

(2);

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

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

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

[expfulfill];

}];

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

[selfwaitForExpectationsWithTimeout:

3handler:

^(NSError*_Nullableerror){

if(error){

NSLog(@"TimeoutError:

%@",error);

}

}];

}

-(XCTestExpectation*)expectationForPredicate:

(NSPredicate*)predicateevaluatedWithObject:

(id)objecthandler:

(XCPredicateExpectationHandler)handler;

利用谓词计算,如果限定时间内满足条件则通过测试

-(void)testThatBackgroundImageChanges{

XCTAssertNil([self.buttonbackgroundImageForState:

UIControlStateNormal]);

NSPredicate*predicate=[NSPredicatepredicateWithBlock:

^BOOL(UIButton*_Nonnullbutton,NSDictionary*_Nullablebindings){

return[buttonbackgroundImageForState:

UIControlStateNormal]!

=nil;

}];

[selfexpectationForPredicate:

predicate

evaluatedWithObject:

self.button

handler:

nil];

[selfwaitForExpectationsWithTimeout:

20handler:

nil];

}

-(XCTestExpectation*)expectationForNotification:

(NSString*)notificationNameobject:

(id)objectToObservehandler:

(XCNotificationExpectationHandler)handler;

监听一个通知,如果在规定时间内正确收到通知则测试通过。

-(void)testAsynExample1{

[selfexpectationForNotification:

(@"监听通知的名称xxx")object:

nilhandler:

nil];

[[NSNotificationCenterdefaultCenter]postNotificationName:

@"监听通知的名称xxx"object:

nil];

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

[selfwaitForExpectationsWithTimeout:

3handler:

nil];

}

-(XCTestExpectation*)keyValueObservingExpectationForObject:

(id)objectToObservekeyPath:

(NSString*)keyPathexpectedValue:

(id)expectedValue;

创建一个KVO观察模式

-(XCTestExpectation*)keyValueObservingExpectationForObject:

(id)objectToObservekeyPath:

(NSString*)keyPathhandler:

(XCKeyValueObservingExpectationHandler)handler;

创建一个KVO观察模式

-(void)waitForExpectationsWithTimeout:

(NSTimeInterval)timeouthandler:

(XCWaitCompletionHandler)handler;

设定等待时间,等待时间内满足所有条件则测试通过,成功或超时都会执行handlerblock(optional)

typedefBOOL(^XCPredicateExpectationHandler)(void);

如果未提供Handle,第一次测试通过即满足条件,如果提供了Handle,它能覆盖原有的行为和条件,那么将重新判定是否满足条件。

typedefBOOL(^XCNotificationExpectationHandler)(NSNotification*notification);

获得符合期望的通知时将被调用,满足条件为Yes

typedefBOOL(^XCKeyValueObservingExpectationHandler)(idobservedObject,NSDictionary*change);

当KVO监视的值反正改变是调用,满足条件为Yes

typedefvoid(^XCWaitCompletionHandler)(NSError*error);

当测试成功或超时时调用,需要指定error类型,否则error=nil;

@propertyBOOLcontinueAfterFailure;

默认为Yes,当case中某条测试语句失败时会继续向下执行,实测只向下执行了一步,待验证。

-(void)measureBlock:

(void(^)(void))block;

测试块中代码的性能。

-(void)measureMetrics:

(NSArray*)metricsautomaticallyStartMeasuring:

(BOOL)automaticallyStartMeasuringforBlock:

(void(^)(void))block;

measureBlock的拓展版,当需要自定义测量的开始点和结束点时,又或者要测量多个指标时调用此方法。

Metrics:

是测量标准数组;automaticallyStartMeasuring为真时,自动开始测试,为假则需要startMeasuring作为启动点。

注意在一个代码块中开始点和结束点只能各有一个,出现一下情况时测试将会失败:

automaticallyStartMeasuring=YES且代码块中调用了startMeasuring方法;

automaticalltStattMeasuring=NO且代码块中没调用或多次调用了startMeasuring方法;

在代码块中多次调用了stopMeasuring方法。

-(void)startMeasuring;

在measureBlock中调用此方法来标记一个测量起点。

-(void)stopMeasuring;

在measureBlock中调用此方法来标记一个结束点。

+(NSArray*)defaultPerformanceMetrics;

这是调用measureBlock时默认使用的测量标准数组。

-(id)addUIInterruptionMonitorWithDescription:

(NSString*)handlerDescriptionhandler:

(BOOL(^)(XCUIElement*interruptingElement))handler;

在当前上下文中添加一个Handle

handlerDescription:

用于阐述这个Handle的作用和行为,主要被用来Debug和分析

异步测试

XCTestExpectation

使用以下XCTestCase方法来创建XCTestExpectation实例:

expectationWithDescription:

expectationForPredicate:

evaluatedWithObject:

handler:

expectationForNotification:

object:

handler:

keyValueObservingExpectationForObject:

keyPath:

expectedValue:

keyValueObservingExpectationForObject:

keyPath:

handler:

-(void)fulfill;

为满足条件的表达式做标记

布尔值检测

XCTAssert/XCTAssertTrue

断言表达式为真,XCTAssert(expression,format...)当expression求值为TRUE时通过; 

XCTAssert([imageexists]);

XCTAssertTrue(expression,format...)当expression求值为TRUE时通过; 

XCTAssertTure([imageexists]);

XCTAssertFalse

表达式为假,XCTAssertFalse(expression,format...)当expression求值为False时通过; 

XCTAssertFalse(!

[imageexists]);

空值检测

XCTAssertNil

表达式的值为空,XCTAssertNil(a1,format...)为空判断,a1为空时通过,反之不通过; 

NSArray*array=nil;

XCTAssertNil(array);

XCTAssertNotNil

表达式的值非空,XCTAssertNotNil(a1,format…)不为空判断,a1不为空时通过,反之不通过;

NSArray*array=[NSArrayarray];

XCTAssertNotNil(array);

等式检测

XCTAssertEqual

XCTAssertEqual(a1,a2,format...)判断相等(当a1和a2是C语言标量、结构体或联合体时使用,判断的是变量的地址,如果地址相同则返回TRUE,否则返回NO); 

XCTAssertEqual(array,array2,@"失败时输出");

XCTAssertEqualObjects

XCTAssertEqualObjects(a1,a2,format...)判断相等,[a1isEqual:

a2]值为TRUE时通过,其中一个不为空时,不通过;

XCTAssertEqualObjects(array,array2,@"失败时输出");

XCTAssertEqualWithAccuracy

XCTAssertEqualWithAccuracy(a1,a2,accuracy,format...)判断相等,(double或float类型)提供一个误差范围,当在误差范围(+/-accuracy)以内相等时通过测试;

XCTAssertEquallWithAccuracy(array,array2,@"失败时输出");

不等式检测

XCTAssertNotEqual

XCTAssertNotEqual(a1,a2,format...)判断不等(当a1和a2是C语言标量、结构体或联合体时使用);

XCTAssertNotEqual(array,array2,@"失败时输出");

XCTAssertNotEqualObjects

XCTAssertNotEqualObjects(a1,a2,format...)判断不等,[a1isEqual:

a2]值为False时通过;

XCTAssertNotEqualObjects(array,array2,@"失败时输出");

XCTAssertNotEqualWithAccuracy

XCTAssertNotEqualWithAccuracy(a1,a2,accuracy,format...)判断不等,(double或float类型)提供一个误差范围,当在误差范围以内不等时通过测试;

XCTAssertNotEquallWithAccuracy(array,array2,@"失败时输出");

相对值检测

XCTAssertGreaterThan:

A>B

XCTAssertGreaterThan(floatB,floatA,@"FailOutput");

XCTAssertGreaterThanOrEqual:

A≥B

XCTAssertGreaterThanOrEqual(floatB,floatA,@"FailOutput");

XCTAssertLessThan:

A

XCTAssertLessThan(floatB,floatA,@"FailOutput");

XCTAssertLessThanOrEqual:

A≤B

XCTAssertLessThanOrEqual(floatB,floatA,@"FailOutput");

异常检测

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没有发生具体异常、具体异常名称的异常时通过测试,反之不通过。

无条件失败断言

XCTFail

无条件产生一个失败的结果。

XCTFail();

UITesting

XCUIElementsAPI

exists

判断控件对象是否存在。

BOOL类型。

[textFieldexists]

debugDescription

保存某控件的debug信息,这些信息只能用于调试case,NSString类型。

NSLog(@"%@",[textFielddebugDescription]);

hittable

BOOL类型的只读属性,表示当前元素能否获取到坐标。

descendantsMatchingType

从该控件下所有子控件中找到符合指定类型的控件,需要传入XCUIElementType(枚举类,定义了iOS中所有可定位的控件)类型的参数,返回包含了XCUIElementType类型的XCUIElementQuery数组。

XCUIElementQuery*textFields=[cellchildrenMatchingType:

XCUIElementTypeTextField];

childrenMatchingType

只从与该控件有直接关系的子控件中找到符合指定类型的控件,需要传入XCUIElementType类型的参数,返回包含了XCUIElementType类型的XCUIElementQuery数组。

XCUIElementQuery*textFields=[celldescendantsMatchingType:

XCUIElementTypeTextField];

tap

单击

[app.tables.staticTexts[@"Groceries"]tap];

doubleTap

双击

[buttondoubletap];

twoFingerTap

双指单击

[apptwoFingerTap];

pressForDuration(duration:

NSTimeInterval)

长按,时间由传入的参数定义,单位为秒

[textFieldpressForDuration:

5.5];

pressForDuration(duration:

NSTimeInterval,thenDragToElementotherElement:

XCUIElement)

长按拖拽。

在控件上长按后,拖拽到另外一个控件。

传入2个参数:

长按时间和拖拽到目标控件。

[textFieldpressForDuration:

5.5,thenDragToElement:

table];

swipeUp/swipeDown/swipeLeft/swipeRight

从下划到上/从上滑到下/从右滑到左/从左滑到右

[appswipeUp];

typeText

输入字符。

需要一个参数:

NSString

[addItemTextFieldtypeText:

@"Hello"];

tapWithNumberOfTaps:

numberOfTouches:

多触摸点及多次点击

[windowstapWithNumberOfTaps:

3numberOfTouches:

2];

pinchWithScale:

velocity:

捏合手势scale=0~1为捏合、>1为放大,velocity为捏合速度

[windowspinchWithScale:

0.2velocity:

-0.05];

当01时,velocity必须大于0,time(s)=scale/velocity。

[imgpinchWithScale:

0.5velocity:

0.2];

rotate:

withVelocity:

旋转手势rotate:

要旋转的弧度withVelocity:

每秒要旋转的弧度

Rotate和Velocity必须同号顺时针为正向。

[imgrotate:

2withVelocity:

0.4];

normalizedSliderPosition

只读属性,返回滑块控件中滑块的位置(0~1)

adjustToNormalizedSliderPosition:

尽可能让滑块移动到指定的位置(0-1)

adjustToPickerWheelValue:

输入字符串让选择器显示对应内容,如果没有对应内容,返回Fail

coordinateWithNormalizedOffset:

根据控件的原点坐标和偏移量来确定一个新坐标

[elementcoordinateWithNormalizedOffset:

CGVectorMake(10,10)];

XCUIApplicationAPI

XCTest新加的类,用于做UI测试,代表被测应用,父类为XCUIElement

launch

启动应用。

如果目标应用已运行,首先终止应用,然后再次启动应用。

[applaunch];

terminate

关闭应用。

[appterminate];

launchArguments

数组对象,保存启动参数。

NSArray*args=[applaunchArguments];

for(inti=0;i<[argscount];i++){

NSLog(@"arg:

%@",[argsobjectAtIndex:

i]);

}

launchEnvironment

字典对象,保存启动环境变量

NSDictionary*env=[applaunchEnvironment];

for(idkeyinenv){

NSString*object=[envobjectForKey:

key];

NSLog(@"env:

%@",object);

}

XCUIElementAttributesAPI

协议类,XCUIElement遵守的协议

identifier

字符串类型AccessibilityID

NSString*identifier=[appidentifier];

.frame

控件的矩形区域

CGRectframe=[appframe];

Value

获取元素的原值

idvalue=[appvalue];

placeholderValue

返回元素的占位值

title

标题,String类型

NSString*title=[apptitle];

label

标签值,String类型

NSString*label=[applabel];

elementType

控件类型

XCUIElementType*elementType=[appelementType];

enabled

是否可用,BOOL类型

BOOL*isEnabled=[appisEnabled];

hasFocus

是否具有UI焦点

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1