XCTest 之单元测试 (一)

作者: lazy_boy_coder | 来源:发表于2017-12-10 15:35 被阅读0次

前言

前段时间在负责iOS移动端的埋点项目,项目上线好几个月了,开始针对,SDK中出现的问题,以及整个代码的结构执行重构。为了增加重构之后可以快速发现哪里不足,以及针对这几个月来领悟到SDK的痛。至此,给埋点SDK增加单元测试。

单元解决了什么问题

  • 单元测试保证了,即使在项目重构之后,也可以快速帮我验证逻辑
  • 节省测试时间,减少了低级错误
  • 由于疏忽改动了代码,可以帮助快速检测出

XCTest 使用

首先新建一个工程,在如下页面选择



如果,在创建项目的时候没有选择的话,还可以通过新建target的形式
File -> new -> Target -> iOS Unit Testing Bundle 的形式创建测试 target



这样我们就为工程创建了单测,工程目录结构如图:

这里有几个方法:

// 在每一个测试方法调用前,都会被调用
// 用来初始化 test 用例的一些初始值
- (void)setUp {
    [super setUp];
    // 代码写在这
}

// 在每一个测试方法调用后,都会被调用
// 用来重置 test 方法的数值
- (void)tearDown {
    // 代码写在这
    [super tearDown];
}

// 性能测试
- (void)testPerformanceExample {
    // This is an example of a performance test case.
    [self measureBlock:^{
        for(int i = 0; i < 1000; i++) {
        }
    }];
}
把需要性能测试的代码写在block里面

关于性能:
当我们点击测试之后,会在左边出现result具体结果。



参数:

  • Metirc : Time 表示度量标准为时间
  • Result : 是以百分比的形式和上次测量结果做比较。好 better ,坏 worse
  • Average : 为测量时间的平均值
  • Baseline : 时间基准,以这个时间基础为基础,算出来的时间跟这个比较得到Result结果的百分比
  • MAX STDDEV : 标准差最大为多少

代码覆盖度:
要看到代码覆盖度需要打开:
Edit Scheme -> Test -> 勾选上 Gather coverage data



我们在新建项目的时候,这个选项是默认不帮我们勾选的
当我们写好单元测试代码的时候,可以直接 Command + U 快捷键,全局跑下所有的单元测试。
可以在左侧的report navigator



这样可以看到代码覆盖度。如果,编辑了选项,还是在 Coverage Tab下没有看到展示代码覆盖度。那么请清理一下缓存重新试一下。

断言API,苹果在

#import <XCTest/XCTestAssertionsImpl.h>

文件里提供了断言的 API

XCTFail  无条件报错断言
XCTAssertEqualObjects(expression1, expression2, ...)  两个数值不相等的时候报错
XCTAssertNotEqualObjects(expression1, expression2, ...) 两个数值相等的时候报错
XCTAssertNil(expression, ...)  表达式不为nil的时候则报错
XCTAssertNotNil(expression, ...) 当一个表达式的值为空的时候则报错
XCTAssertTrue(expression, ...) 当表达式的值不为 true 的时候则报错
XCTAssertFalse(expression, ...) 当表达式的值不为false的时候则报错
XCTAssertEqualObjects(expression1, expression2, ...) 两个表达式不相等则报错
XCTAssertNotEqualObjects(expression1, expression2, ...) 两个表达式相等则报错
XCTAssertEqual(expression1, expression2, ...) 两个表达式不相等则报错 更多的用于数值比较
XCTAssertNotEqual(expression1, expression2, ...) 两个表达式相等则报错  更多的用于数值比较
XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, ...) 两个表达式之间的差异
如果大于accuracy则报错
XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, ...)两个表达式之间的差异
如果小于等于accuracy则报错
XCTAssertGreaterThan(expression1, expression2, ...) 表达式1小于等于表达式2则报错
XCTAssertGreaterThanOrEqual(expression1, expression2, ...) 表达式1如果小于表达式2则报错
XCTAssertLessThan(expression1, expression2, ...) 表达式1 大于等于表达式2则报错
XCTAssertLessThanOrEqual(expression1, expression2, ...)  表达式1 大于表达式2则报错
XCTAssertThrows(expression, ...) 表达式不抛异常时报错
如: 
NSArray *array = @[@1, @2, @3];
XCTAssertThrows([array objectAtIndex:1]);
XCTAssertThrowsSpecific(expression, exception_class, ...) 对指定的类,没抛异常时则报错
如:
XCTAssertThrowsSpecific([array objectAtIndex:10], NSArray);
XCTAssertThrowsSpecificNamed(expression, exception_class, exception_name, ...) 没抛指定类
指定名字的异常则测试失败
XCTAssertNoThrow(expression, ...) 抛异常时则测试失败
XCTAssertNoThrowSpecific(expression, exception_class, ...) 跑抛出指定类的异常则测试失败

相关文章

  • 【开发技巧】单元测试

    iOS XCTest单元测试 iOS开发:XCTest单元测试(附上一个单例的测试代码) [iOS单元测试系列]单...

  • iOS测试

    [iOS 单元测试之XCTest详解](http://blog.csdn.net/hello_hwc/articl...

  • (二) kiwi 实践一二

      上一篇 初探 iOS 单元测试 我们简述了单元测试的目的和本质,并介绍了XCTest的常见用法。XCTest作...

  • XCTest入门

    关于XCTest XCTest是苹果官方提供的单元测试框架,由此苹果提供了很详细的文档XCTest。我们写的单元测...

  • iOS 单元测试之XCTest详解

    参考自:iOS 单元测试之XCTest详解 原创blog,转载请注明出处 blog.csdn.net/hello_...

  • XCTest 之单元测试 (一)

    前言 前段时间在负责iOS移动端的埋点项目,项目上线好几个月了,开始针对,SDK中出现的问题,以及整个代码的结构执...

  • iOS-UnitTests单元测试

    本文简介 1.UnitTests 2.XCTest 单元测试 3.OCMock 单元测试 4.UITests UI...

  • iOS单元测试

    iOS单元测试 前言 单元测试使用XCTest框架 单元测试的目标:模型文件 用处:不基于界面UI的情况下,保证模...

  • ios单元测试之XCTest

    前言:测试是一个好的App不可缺少的部分。每一个App都是由一个个小的功能组合到一起的。而这些小的功能又是由一个个...

  • 阅读列表

    1.爱上单元测试2.XCTest单元测试3.hook方案-Method swizzling4.delegate和b...

网友评论

    本文标题:XCTest 之单元测试 (一)

    本文链接:https://www.haomeiwen.com/subject/sifpixtx.html