这是一本书的名字,书还没有时间看,借鉴下看过源码的那些轮子是如何写测试代码的
单元测试
AFNetworking
AFN 的单元测试分为 UIKit 测试(包含有 UIKit 调用的测试,如 UIImage/UIImageView/UIButton 等),还有接口测试。基本上每一个类对应一个测试类,每个类都保证创建后能返回非空,或者预期的值,具体代码省略。
CocoaLumberjack
使用了第三方库 expecta 使代码更易读。测试点类似 AFNetworking,具体代码省略。
Masonry
使用了 expecta,创建约束后,经过一些设置后,确认是否能获得预期的值,具体代码省略。
NullSafe
[NSNull null] 的 stringValue/ bytes 方法应当返回 nil
XCTAssertNil(result);
[NSNull null] floatValue 方法是否返回 0.0
XCTAssertEqualWithAccuracy(result, 0.0f, 0.0f);
[NSNull null] intValue 方法是否返回 0
XCTAssertEqual(result, 0);
创建 [NSNull null] 的类,类名是否 NSNull
XCTAssertEqualObjects(result, @"NSNull");
[NSNull null] description 方法是否返回
XCTAssertEqualObjects(result, @"<null>");
[NSNull null] range 方法是否和 (0,0)范围一致
NSRange compare = NSMakeRange(0, 0);
XCTAssertTrue(NSEqualRanges(result, compare), @"Range test failed");
NSNull 的 Category 创建的方法 NullTestMethod 返回非0数字后是否依然能按照 0 处理
XCTAssertEqualWithAccuracy(result, 0.0, 0.0);
JLRoutes
设置 route,添加各种可能性的设置,测试是否能够正常处理,具体代码省略
UI 测试
主要是录制一些操作,然后进行校验,忽略轮子中的测试方式
IQKeyboardManager
主要是界面中操作过程中录制测试,具体代码省略
DZNEmptyDataSet
Pod 引入了 FaceBook 的第三方 FBSnapshotTestCase,这个库目前已经更新为 iOSSnapshotTestCase
截图测试
DetailViewController *vc = [[DetailViewController alloc] initWithApplication:app];
FBSnapshotVerifyViewWithOptions(vc.view, app.displayName, FBSnapshotTestCaseDefaultSuffixes(), 0);
使用方式:在 setUp 中首先设置 recordMode 为 YES,进入录制模式,执行测试的上述方法,会生成截图,忽略结果,这时只是截图操作,生成的图片文件在 getReferenceImageDirectoryWithDefault 中指定的位置,以此截图为参考图片。修改 recordMode 为 NO,然后再执行测试方法,就会用快照和之前存在指定位置的参考图片做对比,如果两个图片不匹配的话,测试就会失败