优秀的电子商务网站,化工网站关键词优化,无锡网站搜索优化,网络公司网站制作岗位职责XCTest测试框架(单元测试XCTests、性能测试XCPPerformanceTests、用户界面测试XCUItests) 单元测试XCTests#xff1a;测试应用中事件或逻辑是否预期工作。 用户界面测试XCUItests#xff1a;测试用户与应用的UI交互(如点击按钮、滑动屏幕)。 性能测试XCPPerformanceTests测试应用中事件或逻辑是否预期工作。 用户界面测试XCUItests测试用户与应用的UI交互(如点击按钮、滑动屏幕)。 性能测试XCPPerformanceTests量化测试代码的性能并在代码更改后跟踪变化。 测试断言XCTest提供断言API供验证结果(XCTAssertTrue()/XCTAssertFalse()/XCTAssertEqual() )。 集成和运行:可直接从Xcode工具的测试导航器运行(XCTest集成在Xcode中)。 测试报告Xcode为执行的XCTest测试生成详细的测试报告。
1.创建Native项目包时伴随创建测试(环境)或通过‘测试导航’菜单 2.测试(环境)文件夹 xxTests/xxUITests 3.环境下测试文件的在这里插入代码片具体分析
// 自动化测试 环境
// KeepThreadAliveTests.m
// KeepThreadAliveTests
//
// Created by haijunyan on 2023/12/9.
//#import XCTest/XCTest.hinterface KeepThreadAliveTests : XCTestCaseendimplementation KeepThreadAliveTests- (void)setUp {//setUp当前测试类初始化事件(首先被调用)(资源准备)}- (void)tearDown {//tearDown销毁事件(资源的清理销毁/最后被调用)}- (void)testExample {//测试用例函数(功能测试用例)//XCTAssert断言/相关函数验证结果
}- (void)testPerformanceExample {//性能测试函数(性能测试用例)//量化块measureBlock的IMP被默认执行10次并输出对应的耗时报告//IMP耗时报告[self measureBlock:^{}];
}//测试函数1.void 2.‘-’实例事件且无入参3.test开头
//自定义测试函数的执行顺序与函数名中test后字符码大小有关(如 -voidtest001XXX先于-voidtest002XXX 执行)
//运行测试环境快捷键CMD U
//断言API(系统提供且可供调用)
//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]值为YES时通过其中一个不为空时不通过
//XCTAssertNotEqualObjects(a1, a2, format...)判断不等 [a1 isEqual:a2]值为 False 时通过
//XCTAssertEqual(a1, a2, format...)判断相等(a1 a2是否返回一个YES)当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没有发生具体异常、具体异常名称的异常时通过测试反之不通过
//代码覆盖率越高说明测试环境涉及的功能越全(测试质量保障)
//点击editscheme对应的tagart-test-codeCoverage- (void)testAsync {XCTestExpectation *except [self expectationWithDescription:异步请求测试用例];
// [self.viewModel requestData:^(BOOL success) {
// XCTAssertTrue(success);//调用fulfill后表示异步逻辑完成
// [except fulfill];
// }];[self waitForExpectationsWithTimeout:10 handler:^(NSError * _Nullable error) {}];
}//测试逻辑部分几点建议:
//在编码时要尽量按照MVVM的模式进行开发相比MVC模式MVVM的逻辑代码都封装在VM里面更利于进行脱离UI的测试。可以设想如果将逻辑方法都写在View或ViewController中则执行测试用例时就不得不引入很多额外的页面UI组件。
//编写测试用例时有3个核心点即输入输出和结果判定。通过输入来设置测试用例的初始状态通过对输出的结果判定来决定测试用例是否通过
//编写的测试函数要尽量符合下面特性功能单一有输入有输出。
//函数有输入参数没有返回值时需要对输入的参数进行修改则这种场景编写测试用例时要判断的是执行函数操作后的原始变量是否符合预期。
//函数没有输入参数没有返回值时其作用只是执行一段逻辑操作例如存储文件修改文件等。这时我们可以修改下功能函数在函数内返回操作成功或失败的结果测试用例使用此结果来作为是否通过的标准。end
- (void)testLaunchPerformance {//测试 启动时长性能if (available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *)) {//衡量启动应用所耗时长[self measureWithMetrics:[[[XCTApplicationLaunchMetric alloc] init]] block:^{//IMP默认多次启动执行(查看每次时长,对比结果)[[[XCUIApplication alloc] init] launch];}];}
}备注 单元测试