测试驱动开发(TDD)是当前流行的开发理念,XCTest是Apple封装的单元测试类库。使用XCTest进行单元测试的流程比较简单,本博客仅简单介绍下XCTest的使用。但对于单元测试的理解(何时使用,如何更高效地驱动开发)却是一个需要积累的过程,要在TDD的过程中仔细体会。
单元测试的使用场景
- 对API接口的单元测试,测试驱动开发。
- 测试网络接口的可用性。不需要经过多次操作到某个界面再去测试该接口。如分享功能,一般需要特定的逻辑才会触发。若直接测试其API就很方便了。
- API性能测试。
setUp和tearDown
一个测试用例以一个Objective-C类的形式存在,其implementation中有默认的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中进行基本对象的初始化等一些必需的步骤。
单元测试
所有以test开头的实例方法(不能有参数)都是一个完整的单元测试的case。
最左边有个小图标,点击之后即可执行该测试case。
性能测试
性能测试可直接使用 - (void)measureBlock:(void (^)(void))block; 进行,传递参数即为要执行任务组成的一个block。
如以下的case可用于测试measureBlock接收的block参数中执行的性能。
Baseline即可设置该性能是否合格的参考基准。
注意,一个性能测试case中只能执行一次measureBlock,即只能测试一个指定block步骤的性能(这其实也是合乎情理的,混到一块了哪里还能区分出性能测试的结果)。因此,在while,for等循环中是不能使用measureBlock的,否则会出错。
measureMetrics的用法跟measureBlock类似。
当然,也可以使用startMeasuring和stopMeasuring方法进行性能测试,但绝大多数情况下使用measureBlock已经足够了。
性能测试的宏定义
例如,在单独测试一个图片滤镜的性能时&#