XCTestCase
进入xxUITests.m文件,会看到继承自XCTestCase:Xcode集成的一套单元测试框架
XCTestCase
The primary class for defining test cases, test methods, and performance tests.
## Overview
A test case is a group of related test methods, with optional setup and teardown before and after tests are run. See [Defining Test Cases and Test Methods](apple-reference-documentation://tc2870870) for more information.
每个测试用例在运行前都会执行
setup
方法(Provides an opportunity to customize initial state before a test case begins.
),并且在运行后会执行teardown
方法(Provides an opportunity to perform cleanup after a test case ends.
)。我们可以在此时做一些初始化、销毁回收等操作。testExample
作为逻辑测试,测试逻辑是否有问题;testPerformanceExample
作为性能测试,测试当前用例的性能,耗时等操作,先看一个逻辑测试的demo。
每个测试用例都要以
test
开头,比如testExampl
- (void)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. } - (void)testExample { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. int a = 10; int b = 20; int c = a + b; XCTAssertEqual(c, 30, @"计算正确"); } - (void)testPerformanceExample { // This is an example of a performance test case. [self measureBlock:^{ // Put the code you want to measure the time of here. }]; }
在此测试用例demo运行时,当c
等于30的时候直接通过,否则这里会报错!这里使用XCTAssertEqual
断言来进行判断条件是否成立。
常用断言
XCTAssertEqual:Asserts that two expressions have the same value. XCTAssertEqualObjects:Asserts that two objects are considered equal. XCTAssertNotEqual:Asserts that two expressions do not have the same value. XCTAssertNotEqualObjects:Asserts that two objects are not considered equal. XCTAssertEqualWithAccuracy:Asserts that two expressions have the same value within a certain accuracy. XCTAssertNotEqualWithAccuracy:Asserts that two expressions do not have the same value within a certain accuracy. XCTAssertNil:Asserts that an expression is nil. XCTAssertNotNil:Asserts that an expression is not nil.
检验平等和不平等(Testing for Equality and Inequality )
XCTAssertEqual(expression1, expression2, format...)
:当expression1不等于expression2时报错,这个测试用于C语言的标量。XCTAssertEqualObjects(expression1, expression2, format...)
:当expression1不等于expression2时报错(或者一个对象为空,另一个不为空)。XCTAssertNotEqual(expression1, expression2, format...)
:当expression1等于expression2时报错,这个测试用于C语言的标量。XCTAssertNotEqualObjects(expression1, expression2, format...)
:当expression1等于expression2时报错。
在给定精度内测试是否相等
XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, format...)
:当expression1和expression2之间的差别高于accuracy 将报错。这种测试适用于floats和doubles这些标量,两者之间的细微差异导致它们不完全相等,但是对所有的标量都有效。XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, format...)
:当expression1和expression2之间的差别低于accuracy将产生失败。这种测试适用于floats和doubles这些标量,两者之间的细微差异导致它们不完全相等,但是对所有的标量都有效。
测试一个条件是否为空
XCTAssertNil(expression, format...)
:当expression参数非nil时报错。XCTAssertNotNil(expression, format...)
:当expression参数为nil时报错。
性能测试
//性能测试方法,通过测试block中方法执行的时间,比对设定的标准值和偏差觉得是否可以通过测试
// Measures the performance of a block of code.
- measureBlock:
// Measures the performance of a block of code, optionally deferring the starting point for measurement.
- measureMetrics:automaticallyStartMeasuring:forBlock:
// Starts the measurement of performance metrics within a block of code.
- startMeasuring
// Ends the measurement of performance metrics within a block of code.
- stopMeasuring
// Identifies the performance metrics measured when [`measure<wbr style="margin-bottom: 0px;">Block:`](apple-reference-documentation://hcnJonuUfI) is invoked.
defaultPerformanceMetrics
// Performance metrics that can be measured by XCTest.
XCTPerformanceMetric
- measureBlock
主要是通过block内部代码块的执行时间来测试性能,通过设置baseline(基准)和stddev(标准偏差)来判断方法是否能通过性能测试。- measureMetrics:automaticallyStartMeasuring:forBlock
测量代码块的性能,可以选择推迟测量的起点。- startMeasuring
在代码块中开始性能度量。- stopMeasuring
结束代码块内的性能度量。defaultPerformanceMetrics
标识在调用measureBlock:时度量的性能指标。XCTPerformanceMetricXCTest
可以测量的性能指标。
创建异步测试期望
要创建异步测试期望,请使用下面的方便方法,或者手动创建XCTestExpectation
及其子类的实例。
// Creates a new expectation with an associated description.
- expectationWithDescription:
// Creates an expectation that is fulfilled if the predicate returns YES when evaluated with the given object.
- expectationForPredicate:evaluatedWithObject:handler:
// Creates an expectation that is fulfilled when a specific [`NSNotification`](apple-reference-documentation://hcmB87CArc) is received for a given object.
- expectationForNotification:object:handler:
// Creates an expectation that uses Key Value Observing to observe a value until it matches an expected value.
- keyValueObservingExpectationForObject:keyPath:expectedValue:
// Creates an expectation that uses Key Value Observing to observe a value and respond to changes in that value by calling a provided handler.
- keyValueObservingExpectationForObject:keyPath:handler:
- expectationWithDescription
:创建带有关联描述的新期望,比如操作出错的原因描述。- expectationForPredicate:evaluatedWithObject:handler
:创建一个期望,如果predicate
在对给定对象进行计算时返回YES,则该期望将被满足。- expectationForNotification:object:handler
:创建期望,该期望在接收到给定对象的特定NSNotification时被实现。该方法监听一个通知,如果在规定时间内正确收到通知则测试通过。- keyValueObservingExpectationForObject:keyPath:expectedValue
:创建一个期望,该期望使用键值观察来观察一个值,直到它与期望的值匹配为止。- keyValueObservingExpectationForObject:keyPath:handler
:创建一个期望,该期望使用键值观察来观察值,并通过handler
来响应该值中的更改。
等待的期望
可以使用下面的方法实现等待异步测试期望,或者创建XCTWaiter的实例。
// Waits on a group of expectations for up to the specified timeout.
- waitForExpectations:timeout:
// Waits on an array of expectations and specifies whether they must be fulfilled in the given order.
- waitForExpectations:timeout:enforceOrder:
// Waits until all expectations are fulfilled or the timeout is reached.
- waitForExpectationsWithTimeout:handler:
// A block to be called when a call to waitForExpectationsWithTimeout:handler: has all of its expectations fulfilled, or times out.
XCWaitCompletionHandler
// Error codes for errors that can occur while waiting for expectations to be fulfilled.
XCTestErrorCode
// Error domain for errors that can occur while waiting for expectations to be fulfilled.
XCTestErrorDomain
- waitForExpectations:timeout
:等待一组期望,直到指定的超时。- waitForExpectations:timeout:enforceOrder
:等待一系列期望,并指定它们是否必须按照给定的顺序实现。- waitForExpectationsWithTimeout:handler
:等待,直到所有期望都满足或达到超时,执行handler
。设置延迟时间(秒),如果没有满足测试条件就报错。XCWaitCompletionHandler
:当waitForExpectationsWithTimeout:handler:的调用完成了所有的期望或超时时的回调。XCTestErrorCode
:在等待期望实现时可能发生的错误的错误代码。XCTestErrorDomain
:在等待期望实现时可能发生的错误的错误域。
该文章为记录本人的学习路程,也希望能够帮助大家,知识共享,共同成长,共同进步!!!